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>
Réponses
Trop de publicités?@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.
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