2017-08-22 5 views
0

J'ai un problème. J'essaye de construire une communication de WCF avec de multiples entpoints. Mais cela ne fonctionne jamais et affiche un ErrorMessage comme ceci:Communication WCF avec plusieurs points d'extrémité

  • Le nom du contrat '{0}' est introuvable dans la liste des contrats implémentés par le service '{1}'.

Et voici ma config-file:

*

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="MwWcfLibrary.Service"> 

     <endpoint address="net.tcp://localhost:8733" 
        binding="netTcpBinding" 
        bindingConfiguration="" 
        bindingName="Action" 
        name="ActionInterface" 
        contract="MwWcfLibrary.Actions.Interfaces.IAction"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" 
        binding="mexTcpBinding" 
        bindingConfiguration="" 
        name="Mex" 
        contract="IMetadataExchange" > 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint binding="netTcpBinding" 
        address="net.tcp://localhost:8733" 
        bindingConfiguration="" 
        name="LifeSignInterface" 
        bindingName="LifeSign" 
        contract="MwWcfLibrary.LifeSign.Interfaces.ILifeSign" > 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint binding="netTcpBinding" 
        address="net.tcp://localhost:8733" 
        bindingConfiguration="" 
        name="DataInterface" 
        bindingName="Data" 
        contract="MwWcfLibrary.Notification.Interfaces.IData"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint binding="netTcpBinding" 
        address="net.tcp://localhost:8733" 
        bindingConfiguration="" 
        name="PublicDataInterface" 
        bindingName="PublicData" 
        contract="MwWcfLibrary.PublicData.Interfaces.IPublicData" > 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint binding="netTcpBinding" 
        address="net.tcp://localhost:8733" 
        bindingConfiguration="" 
        name="PublicStateInterface" 
        bindingName="PublicState" 
        contract="MwWcfLibrary.PublicState.Interfaces.IPublicState" > 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 

     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://localhost:8733//MwWcfLibrary" /> 
      </baseAddresses> 
      <timeouts closeTimeout="00:00:30" /> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

*

Est-ce que quelqu'un comprendre si je configuré quelque chose de mal?

Cordialement.

Répondre

0

EDIT

vous n'a pas été mis en œuvre l'une de ces interfaces: MwWcfLibrary.Actions.Interfaces.IAction, MwWcfLibrary.LifeSign.Interfaces.ILifeSign, MwWcfLibrary.PublicData.Interfaces.IPublicData et MwWcfLibrary.PublicState.Interfaces.IPublicState

ou un ou plusieurs d'entre eux ne sont pas décorées avec l'attribut [ServiceContract]

Incluez l'erreur réelle dans votre question au lieu de '{0}', vous verrez que certains de vos contrats n'ont pas été implémentés par la classe Service qui devrait ressembler à ceci (au moins):

class Service : IAction, ILifeSign, IPublicData, IPublicState 
{ 
    // implementation 
} 

En outre, vos attributs d'adresse ne semble pas être correct, puisque vous avez défini une adresse de base se terminant par un segment // MWW ... encore Dans vos terminaux, l'adresse est plus courte que l'adresse de base. Les adresses de point de terminaison peuvent simplement être relatives comme "Service".

Auparavant

L'élément Service fait référence à une classe qui est une implémentation d'une interface ServiceContract, qui est ce qui se passe dans l'attribut de contrat endpoint. Vérifiez les noms complets de vos interfaces et classes dans ces attributs.

De regarder votre fichier de configuration, vous dites que la classe MwWcfLibrary.Service implémente les ([ServiceContract] décorées) interfaces appelées MwWcfLibrary.Actions.Interfaces.IAction, MwWcfLibrary.LifeSign.Interfaces.ILifeSign, MwWcfLibrary.PublicData.Interfaces.IPublicData et MwWcfLibrary.PublicState.Interfaces.IPublicState

qui semble être dans l'erreur. Voulez-vous dire avoir deux services, chacun avec un point de terminaison distinct?

+0

Bonjour reckface. Merci pour votre réponse rapide. –

+0

Mon intention est d'avoir un seul service avec les interfaces listet. –

+0

vous voulez implémenter toutes ces interfaces dans une classe, puis l'utiliser comme service? – reckface