ожидаемая идентификация при подключении к услуге в качестве сетевой услуги, - PullRequest
4 голосов
/ 27 мая 2010

У нас есть веб-приложение, работающее в пуле приложений как «NETWORK SERVICE». Веб-приложение подключается к службе (.svc) на другом веб-сервере. Другой веб-сервер также имеет службу, размещенную как «NETWORK SERVICE». Я считаю, что это по умолчанию.

Следующая конечная точка при запуске в другом месте работает отлично.

<endpoint address="http://server123/UnitTrustService/UnitTrustService.svc"
  binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_UnitTrustService"
  contract="UnitTrustServiceReference.UnitTrustService" name="WSHttpBinding_UnitTrustService">
 <identity>
  <servicePrincipalName value="server123" />
 </identity>
</endpoint>

К сожалению, при выполнении с веб-сайта мы получаем следующую ошибку.

        System.ServiceModel.Security.MessageSecurityException: 
    The identity check failed for the outgoing message. 
    The expected identity is 'identity(http://schemas.xmlsoap.org/ws/2005/05/identity/right/possessproperty: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn)' 
for the 'http://server123/UnitTrustService/UnitTrustService.svc' target endpoint. 
Server stack trace: at System.ServiceModel.Security.IdentityVerifier.EnsureIdentity(EndpointAddress serviceReference, AuthorizationContext authorizationContext, String errorString)...

Есть идеи? Я попытался запустить его в качестве локальной системы на компьютере веб-сервера с точно такой же конфигурацией, и он отлично работает.

Это как-то связано с IIS?

С уважением Крейг.

1 Ответ

4 голосов
/ 14 октября 2010

Это, вероятно, указывает на проблему с клиентом *1002* web.config. Дважды проверьте <identity> для клиента. Например, следующий пример фрагмента в файле web.config вашего клиента может вызвать это исключение, если служба ожидает, что идентификатор будет userPrincipalName вместо servicePrincipalName. Это легкое различие, которое можно пропустить, и раньше меня настигло.

<system.serviceModel>
    <client>
      <endpoint address="http://server.domain.com/Services/DoSomething.svc" behaviorConfiguration="EndpointBehavior" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDoSomething" contract="Mycontract" name="WSHttpBinding_IDoSomething_Custom_AddSomething">
        <identity>
          <servicePrincipalName value="user@domain.com" />
...