2010-05-27 80 views
4

我们有一个web应用程序,作为'NETWORK SERVICE'在应用程序池中运行。 Web应用程序连接到另一个Web服务器上的服务(.svc)。另一个Web服务器也具有托管为“NETWORK SERVICE”的服务。我相信这是默认设置。预期身份upn作为网络服务连接到服务,

以下端点在其他任何位置运行时均可正常工作。

<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)... 

任何想法? 我已经尝试使用完全相同的配置将其作为本地系统在Web服务器计算机上运行,​​并且完美工作。

它与IIS有关吗?

Registers Craig。

回答

4

这可能表示客户端的 web.config有问题。仔细检查客户端的<identity>。例如,如果服务期望身份为userPrincipalName而不是servicePrincipalName,则客户端的web.config中的以下示例代码段可能会导致此异常。这是一个很容易区分的错过,这让我很兴奋。

<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="[email protected]" /> 
+0

是的,看看回应 - 这是说它预计UPN。这是UserPrincipalName。将servicePrincipalName更改为userPrincipalName。你可以尝试的另一件事是更改server.domain.com到IP地址,看看这是否强制NTLM – Sentinel 2012-03-17 19:50:15