#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, который я устанавливал для конечной точки. Подробности см. В ответе.