51 votes

Le nom du contrat WCF 'IMyService' est introuvable.

Le contrat nom de "IMyService" ne peut pas être trouvé dans la liste des contrats mis en œuvre par le service "MyService'.. ---> Système.InvalidOperationException: Le contrat nom de "IMyService" ne peut pas être trouvé dans la liste des contrats mis en œuvre par le service "MyService'.

Cela me rend fou. J'ai un service web WCF qui fonctionne sur ma machine de dev, mais quand je l'ai copier sur une Machine Virtuelle que j'utilise pour les tests, je reçois le message d'erreur qui semble indiquer que je ne suis pas la mise en œuvre de l'interface, mais il n'a pas de sens parce que le service fonctionne bien sur mon windows xp IIS. la machine Virtuelle utilise Windows Server 2003, IIS. Des idées?

Une chose à noter ici est que j'ai cette erreur sur ma VM, même tout simplement à essayer d'accéder au service dans un navigateur web comme client.

Note: j'utilise principalPermissionMode="UseWindowsGroups", mais ce n'est pas un problème sur ma machine locale. Je viens de m'inscrire sur le windows approprié groupe. Mais pas de chance sur ma VM.

Config:

<configuration>
    <system.serviceModel>
        <diagnostics>
            <messageLogging logEntireMessage="false" maxSizeOfMessageToLog="2147483647" />
        </diagnostics>
        <services>
            <service behaviorConfiguration="MyServiceBehaviors" name="MyService">
                <endpoint binding="basicHttpBinding" bindingConfiguration="basicHttpBinding"
                  name="MyService" bindingName="basicHttpBinding" bindingNamespace="http://my.test.com"
                  contract="IMyService">
                </endpoint>
            </service>
        </services>
        <bindings>
            <basicHttpBinding>
                <binding name="basicHttpBinding" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxStringContentLength="2147483647" />
                    <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" proxyCredentialType="None" />
                    </security>
                </binding>
            </basicHttpBinding>
            <netTcpBinding>
                <binding name="WindowsClientOverTcp" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxStringContentLength="2147483647" />
                </binding>
            </netTcpBinding>
            <wsHttpBinding>
                <binding name="wsHttpBinding" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                      maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </binding>
            </wsHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="MyServiceBehaviors">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceAuthorization principalPermissionMode="UseWindowsGroups"
                      impersonateCallerForAllOperations="false" />
                    <serviceCredentials />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

103voto

Leblanc Meneses Points 1664

[ServiceContract] manquaient dans mon cas.

32voto

masty Points 514

@Garry (un peu tard, je sais)

Si votre attribut ServiceContract définit un nom de configuration, il doit s'agir de la valeur du noeud final et non du nom complet. Je viens d'avoir ce problème comme décrit par l'OP, et c'était la solution pour moi. J'espère que cela aidera quelqu'un d'autre qui trébuche.

13voto

Overflew Points 2072

C'est une solution un peu plus rare, appliquée à ma situation avec la même erreur:

Il est possible que l'espace de nom du contrat puisse être remplacé, avec l'attribut suivant:

 [System.ServiceModel.ServiceContractAttribute([...], ConfigurationName = "IServiceSoap")]
public interface ISomeOtherServiceName
 

Ce qui nécessiterait:

 <endpoint address="" binding="basicHttpBinding" contract="IServiceSoap" />
 

Plutôt que l'habituel (espace de noms) .ISomeOtherServiceName .

Cela peut être le résultat de la génération de code, dans mon cas, WSCFBlue

10voto

Rajesh Points 4898

Votre attribut name dans l’élément de service et l’attribut de contrat dans l’élément de point de terminaison ne sont pas corrects. Ils doivent être des noms qualifiés complets :

Une fois que vous modifiez les valeurs d’être des noms qualifiés complets qui devraient résoudre votre erreur.

8voto

Garry Points 648

L'attribut contract sur le noeud final ne doit-il pas nécessairement être un espace de nom complet?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X