2010-05-30 5 views
1

Chaque fois que mon programme s'exécute vs ajoute la configuration par défaut à mon fichier app.config. À cette exécution, cela fonctionne bien, mais à la prochaine exécution, il essaie réellement de lire la configuration. Le problème est que la configuration par défaut a des erreurs, il ajoute l'attribut "Adresse", mais les attributs ne sont pas autorisés à avoir des majuscules, donc il lance une exception.Comment désactiver la configuration WCF générée automatiquement

Cela signifie que je dois enlever la mauvaise section à chaque passage!

J'ai essayé de configurer le fichier .config mais cela donne des erreurs.

Voici le code que j'utilise pour héberger le serveur:

private static System.Threading.AutoResetEvent stopFlag = new System.Threading.AutoResetEvent(false); 
ServiceHost host = new ServiceHost(typeof(Service), new Uri("http://localhost:8000")); 
host.AddServiceEndpoint(typeof(IService), new BasicHttpBinding(), "ChessServer"); 
host.Open(); 
stopFlag.WaitOne(); 
host.Close(); 

Voici le code client qui appelle le serveur:

ChannelFactory<IChessServer> scf; 
scf = new ChannelFactory<IService> 
       (new BasicHttpBinding(), "http://localhost:8000"); 
IService service = scf.CreateChannel(); 

Merci pour toute aide. Editer: Désolé, cela m'a pris tellement de temps, j'ai essayé d'utiliser DualWSHttpBinding à la place (puisque j'ai vraiment besoin du serveur pour appeler les méthodes client de toute façon), mais génère toujours le fichier de configuration. Voici l'ensemble du fichier de configuration généré automatiquement:

<?xml version="1.0"?> 
<configuration> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup><system.serviceModel> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name=""> 
        <serviceMetadata httpGetEnabled="true" /> 
        <serviceDebug includeExceptionDetailInFaults="false" /> 
       </behavior> 
      </serviceBehaviors> 
     </behaviors> 
     <services> 
      <service name="Chess.ChessService"> 
       <endpoint Address="" binding="wsHttpBinding" contract="Chess.IChessServer"> 
        <identity> 
         <dns value="localhost" /> 
        </identity> 
       </endpoint> 
       <endpoint Address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
       <host> 
        <baseAddresses> 
         <Add baseAddress="http://localhost:8732/Design_Time_Addresses/Chess/ChessService/" /> 
        </baseAddresses> 
       </host> 
      </service> 
      <service name="Chess.ChessClient"> 
       <endpoint Address="" binding="wsHttpBinding" contract="Chess.IChessClient"> 
        <identity> 
         <dns value="localhost" /> 
        </identity> 
       </endpoint> 
       <endpoint Address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
       <host> 
        <baseAddresses> 
         <Add baseAddress="http://localhost:8732/Design_Time_Addresses/Chess/ChessClient/" /> 
        </baseAddresses> 
       </host> 
      </service> 
     </services> 
    </system.serviceModel> 
</configuration> 
+0

Ah oui merci, était un peu perdu sur ce point: P – MrFox

Répondre

1

Visual Studio ne pas recréer la configuration WCF à chaque exécution. Il va recréer la configuration WCF chaque fois que vous faites un Update Service Reference sur votre référence de service dans le projet - mais il ne le fait définitivement pas automatiquement avant chaque exécution - il doit y avoir quelque chose d'autre qui vous cause du chagrin ici.

De plus, vous n'êtes pas se connecter à l'adresse correcte - votre serveur définit ici:

ServiceHost host = new ServiceHost(..., new Uri("http://localhost:8000")); 
host.AddServiceEndpoint(..., .., "ChessServer"); 

et cela se traduit dans votre adresse point final sur le serveur étant

http://localhost:8000/ChessServer 

Cependant, vous le client semble essayer de se connecter à

http://localhost:8000/ 

et il n'y a pas de service Là. Un dernier point: si vous configurez toutes vos choses comme les points de terminaison, les liaisons, etc. dans le code, toute modification de la configuration ne devrait même pas vous déranger - il doit y avoir quelque chose d'autre qui cause vos problèmes.

1

Vous vous trompez. Les noms d'attributs et d'éléments peuvent être en majuscules ou en minuscules.

Qu'est-ce qui vous fait penser que le cas de l'attribut est le problème? Et qu'est-ce qui vous fait penser que le fichier app.config est modifié à chaque passage?

+0

En raison de cette erreur: "Attribut non reconnu" Adresse "Notez que les noms d'attribut sont sensibles à la casse." (C: \ school \ programming \ C# \ Serveur \ bin \ Debug \ Serveur.vshost.exe.Config ligne 14) Et parce que je reçois un message après chaque exécution que le fichier de configuration a changé et si je veux recharger il. Il change probablement la config car je laisse la config vide. Mais je ne veux utiliser aucune config. Je veux héberger un serveur basé sur l'entrée de l'utilisateur plutôt que sur la configuration statique. – MrFox

+0

Si l'attribut n'est pas reconnu, c'est pour une raison autre que le cas. Pourquoi ne pas publier le code XML généré par WCF? –

Questions connexes