Как мне исправить ошибку WCF «Запрошенное обновление не поддерживается net.tcp»?

#c# #.net #wcf #exception-handling #net.tcp

#c# #.net #wcf #обработка исключений #net.tcp

Вопрос:

У меня есть 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. Есть мысли о том, почему у меня не будет работать? Заранее спасибо за вашу помощь.

Ответ №1:

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

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

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

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

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

Ответ №2:

Mex — это метаданные, и (как правило) для просмотра не требуются учетные данные. Я бы начал с просмотра настроек конечной точки вашей службы для обмена метаданными (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 — это то, с чего нужно начать поиск.

Комментарии:

1. Спасибо за вашу помощь. Оказывается, мои привязки были в порядке, это была ошибка в URL, который я устанавливал для конечной точки. Подробности см. В ответе.