Как избежать CommunicationObjectFaptedException при размещении службы WCF в IIS? - PullRequest
1 голос
/ 30 июля 2009

После создания веб-службы WCF для IIS и успешного тестирования ее на моем сервере разработки ASP.NET, когда я развертываю службу на IIS другой машины , она всегда вызывает следующее исключение по потреблению:

Метод тестирования PoolingServiceTest.ProgramTest.MainTaskTest сгенерировал исключение: System.ServiceModel.CommunicationObjectFaptedException: O objeto de comunicação, System.ServiceModel.Channels.ServiceChannel, нет данных

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

трассировка стека

System.ServiceModel.Channels.CommunicationObject.Close (TimeSpan timeout) System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgData, тип Int32) System.ServiceModel.ICommunicationObject.Close (TimeSpan timeout) System.ServiceModel.ICommunicationObject.Close (TimeSpan timeout) Близко() System.IDisposable.Dispose ()

Что я могу сделать, чтобы избежать этого?

С блоком try catch, окружающим код клиента, я получил другое исключение:

[System.ServiceModel.Security.SecurityNegotiationException] {"O chamador no foi autenticado pelo serviço."} System.ServiceModel.Security.SecurityNegotiationException

На английском языке: вызывающая сторона не была аутентифицирована службой

1 Ответ

3 голосов
/ 30 июля 2009

Совершенно очевидно, что из вашего второго сообщения служба ожидает аутентификации вызывающей стороны. В зависимости от используемой привязки (протокола) это может быть один из нескольких методов:

  • Проверка подлинности Windows: по умолчанию включена для привязок wsHttp и netTcp - будет использоваться учетная запись Windows пользователя (для этого требуется, чтобы вызывающий пользователь и вызываемая служба находились в одном домене Windows или, по крайней мере, в доверенных доменах)

  • Аутентификация UserName / Password по членству в ASP.NET - обычно это требует некоторой настройки, поэтому я не думаю, что она будет включена по умолчанию

  • Сертификаты X.509 - опять же, требуется настройка

Я думаю, что ваш веб-сервер IIS как-то не правильно понимает / интерпретирует личность звонящего. Возможно, этот сервер IIS не является членом домена Active Directory? Или компьютер вызывающего абонента не является членом этого же домена? Я думаю, что-то в этой области.

Марк

PS:
Чтобы полностью отключить защиту ( НЕ РЕКОМЕНДУЕТСЯ! - по крайней мере, не для реальных производственных систем), вы можете сделать это:

<bindings>
  <basicHttpBinding>
    <binding name="NoSecurity">
      <security mode="None" />
    </binding>
  </basicHttpBinding>

, а затем ссылаться на эту конфигурацию привязки в ваших конечных точках (как на стороне сервера, так и на стороне клиента):

<endpoint address="....." 
          binding="basicHttpBinding" 
          bindingConfiguration="NoSecurity"
          contract="IMyService" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...