Как исправить ошибку WCF «Запрошенное обновление не поддерживается net.tcp»? - PullRequest
3 голосов
/ 25 октября 2011

У меня есть приложение asp.net mvc 3, работающее на моем локальном IIS7. Это ссылка на службу WCF, которая прекрасно работает.

Недавно я добавил ссылку на другой сервис, размещенный в том же месте, и я получаю следующую ошибку при вызове метода:

Запрошенное обновление не поддерживается 'net.tcp: // webdev02: 15001 / CommonService / Service.svc / mex'. Это могло, это может из-за несовпадающих привязок (например, защита включена на а не на сервере).

Файл web.config в службе имеет идентичные настройки для привязок для первого работающего сервиса и второго нерабочего сервиса. Та же история у моего клиента.

Я также использую свои учетные данные Windows для подключения, например:

svc.ClientCredentials.Windows.ClientCredential.UserName = "myname";
svc.ClientCredentials.Windows.ClientCredential.Password = "mypass";

Кроме того, я могу успешно вызывать обе службы с помощью WcfTestClient. Есть мысли, почему бы мне не работать? Заранее благодарим за помощь.

Ответы [ 2 ]

7 голосов
/ 26 октября 2011

Так что все настроено так, как должно быть. Проблема возникла, когда я установил свой URL-адрес на конечной точке во время создания экземпляра службы на клиенте, я включил /mex в конце, например:

net.tcp://webdev02:15001/CommonService/Service.svc/mex

Когда мой URL должен был быть:

net.tcp://webdev02:15001/CommonService/Service.svc

Теперь все отлично работает, когда я отрубил /mex.

0 голосов
/ 26 октября 2011

Мекс - это метаданные, и (как правило) для просмотра не требуются учетные данные.Я бы начал с просмотра настроек конечной точки вашего сервиса для обмена метаданными (mex).

Я не сделал WCF на net.tcp, но вот пример из моего приложения HTTP WCF:

   <endpoint
      address=""
      binding="wsHttpBinding"
      bindingConfiguration="RequestUserName"
      contract="MyService.IContract"/> 
   <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>

Я могу просматривать wsdl без учетных данных с привязкой, установленной в mexHttpBinding, в то время как методы защищены путем установки wsHttpBinding в:

 <wsHttpBinding>
    <binding name="RequestUserName">
        <security mode="Message">
        <message clientCredentialType="UserName" />
        <transport clientCredentialType="None" proxyCredentialType="None" />
      </security>
    </binding>
  </wsHttpBinding>

Опять же, у меня нет прямого опыта работы с net.tcp WCF, но я полагаю, что ваша привязка к IMetadataExchange - это то, с чего начать.

...