Имя контракта WCF 'IMyService' не найдено? - PullRequest
50 голосов
/ 28 марта 2009

Имя контракта 'IMyService' не найдено в списке контрактов, реализованных службой 'MyService' .. ---> System.InvalidOperationException: имя контракта 'IMyService' не найдено в списке контрактов. реализовано сервисом «MyService».

Это сводит меня с ума. У меня есть веб-сервис WCF, который работает на моем компьютере разработчика, но когда я копирую его на виртуальную машину, которую я использую для тестирования, я получаю сообщение об ошибке, которое указывает на то, что я не реализую интерфейс, но не смысл, потому что служба работает на моем Windows XP IIS. Виртуальная машина использует Windows Server 2003 IIS. Есть идеи?

Следует отметить, что я получаю эту ошибку на своей виртуальной машине даже при попытке доступа к службе в веб-браузере в качестве клиента.

Примечание: я использую PrincipalPermissionMode = "UseWindowsGroups", но это не проблема на моей локальной машине. Я просто добавляю себя в соответствующую группу окон. Но не повезло на моей виртуальной машине.

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>

Ответы [ 14 ]

1 голос
/ 18 мая 2009

вы можете опубликовать код вашего интерфейса ...? как обычно это происходит, если вы не указали атрибут ServiceContract в своем интерфейсе ...

0 голосов
/ 17 августа 2011

В моем случае 2 ошибки:

  1. Разделы конфигурации скопированы из другого прокси-проекта, и я забыл изменить пространство имен на полный путь.

  2. Как клиент, я скопировал раздел конечной точки в узел сервисов - клиент также является сервисом wcf.

0 голосов
/ 31 марта 2009

Хорошо, на самом деле это не удовлетворяет мой вопрос, но я нашел один способ его решения - установить .NET 3.5. потому что обе мои другие среды имели 3.0.

Так что я действительно не определил, почему это будет работать в одной среде, а не в другой, особенно с этой ошибкой интерфейса.

Иди цифра?

0 голосов
/ 28 марта 2009

У вас установлена ​​какая-либо аутентификация на вашей виртуальной машине в IIS? Попробуйте установить его на анонимный и посмотрите, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...