Ajouter une référence de service lors de l'utilisation de la liaison netTcp
J'ai un service WCF qui je testé en copiant ses interfaces pour un exemple de projet client.
Maintenant, je veux travailler correctement par l'ajout d'une référence de service.
Le service est hébergé dans un hébergement windows (à l'aide de installUtil
).
Le service dispose de 2 projets externes (interfaces + datacontracts) et internes (les implémentations).
Pour une raison quelconque, il n'y avait pas d'application.config j'ai donc ajouté un manuellement:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="ExecutionService" behaviorConfiguration="Default">
<endpoint name="TCPEndpoint" address="" binding ="netTcpBinding" contract="Externals.IExecutionService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:3040/ExecutionService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
D'essayer d'ajouter une référence de service de mon client exemple provoque l'erreur suivante:
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:3040/ExecutionService/Externals.IExecutionService'.
There was no endpoint listening at net.tcp://localhost:3040/ExecutionService/Externals.IExecutionService that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
If the service is defined in the current solution, try building the solution and adding the service reference again.
J'ai vu ici qu'il n'y a pas besoin dans l'app.config.
Je suis un peu confus, et je suis un débutant avec WCF
.
Comment une belle WPF
application de référence de mon service? Je veux que le service windows hébergé et je ne veux pas faire glisser les dll avec moi.
Modifier
J'ai ajouté un point de terminaison de métadonnées et mon appconfig ressemble maintenant à ceci:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="ExecutionService" behaviorConfiguration="Default">
<endpoint name="TCPEndpoint"
address=""
binding ="netTcpBinding"
contract="Externals.IExecutionService"/>
<endpoint address="mex"
binding="maxHttpBinding"
contract="Externals.IExecutionService"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:3040/ExecutionService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
J'ai essayé d'ajouter une référence de service en utilisant net.tcp://localhost:3040/ExecutionService
net.tcp://localhost:3040/ExecutionService/Externals
et net.tcp://localhost:3040/ExecutionService/Externals/IExecutionService
et je suis toujours la même erreur.
source d'informationauteur Noich
Vous devez vous connecter pour publier un commentaire.
Que vous devez faire:
Puis votre service de référence seront disponibles sur:
net.tcp://localhost:3040/ExecutionService/mex
comme adresse de base est
net.tcp://localhost:3040/ExecutionService
et l'adresse relative pour le mex extrémité est fixée àmex
Final de l'application.la config est ci-dessous:
Pour un test rapide si la configuration est correcte, j'ai utilisé la console de l'hôte application comme un service d'accueil.
Programme.cs:
Lancer la console application et essayez d'ajouter une référence de service de votre projet grâce à
net.tcp://localhost:3040/ExecutionService/mex
.Au premier coup d'œil, vous avez oublié Point De Terminaison De Métadonnées
Changer cela:
:
Avis ce n'est pas maxHttpBinding mais mexTcpBinding, vous avez eu faute de frappe ainsi.