我很难在Windows Server 2008上将网站部署到IIS 7。 该站点正常工作,直到它尝试调用托管在同一主机上的WCF服务。
当在Visual Studio 20008中运行Web时,一切都适用于我的工作站的服务 使用完全相同的Web配置等。一旦我在服务器上的虚拟目录中部署Web 巴姆。验证错误。当它们都部署在Windows 2003 Server上时,它也可以正常工作。什么 是什么导致这个?救命!请。
如果重要,则所有服务操作都需要Active Directory组成员身份 ASP.net页面的经过身份验证的用户,装饰为: [PrincipalPermission(SecurityAction.Demand,Role =“SOAMemberShipService”)]
我从网站上收到以下错误:
无法满足安全令牌请求,因为身份验证失败。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ServiceModel.FaultException:无法满足安全令牌请求,因为身份验证失败。
来源错误:
第919行:
第920行:公共HSMembersService.MemberSearchResult SearchMembers(HSMembersService.MemberSearch MemberInfoToSearch){
第921行:return base.Channel.SearchMembers(MemberInfoToSearch);
922行:}
923行:}
源文件:c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files \ csrweb \ a4d18657 \ a6d0910d \ App_WebReferences.jgx1svpr.0.cs Line:921
堆栈追踪:
[FaultException:无法满足安全令牌的请求,因为身份验证失败。 System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(消息消息,EndpointAddress目标)+6375432 System.ServiceModel.Security.IssuanceTokenProviderBase`1.ThrowIfFault(消息消息,EndpointAddress目标)+25 System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody(Message incomingMessage,SspiNegotiationTokenProviderState sspiState)+173
[SecurityNegotiationException:调用者未通过该服务进行身份验证。] System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)+4596611 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type)+1713 HSMembersService.IHSMembersService.SearchMembers(MemberSearch MemberInfoToSearch)+0 HSMembersService.HSMembersServiceClient.SearchMembers(MemberSearch MemberInfoToSearch)位于c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Temporary ASP.NET Files \ csrweb \ a4d18657 \ a6d0910d \ App_WebReferences.jgx1svpr.0.cs:921 e:\ CSRWeb \ default.aspx.cs中的_default.btnSearch_Click(Object sender,EventArgs e):114 System.Web.UI.WebControls.Button.OnClick(EventArgs e)+131 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+140 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)+39 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+3215
ASP.net网站的web.config(相关服务部分):
服务web.config:
<!-- Service Endpoints -->
<!-- Unless fully qualified, address is relative to base address supplied above -->
<endpoint address ="" binding="wsHttpBinding" contract="HSMembersService.IHSMembersService" bindingConfiguration="wsHttpBindingConfig">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
<!--<identity>
<dns value="localhost"/>
</identity>-->
</endpoint>
<!-- Metadata Endpoints -->
<!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. -->
<!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsHttpBindingConfig" >
<security mode="Message">
<message clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="HSMembersService.HSMembersServiceBehavior">
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<serviceAuthorization principalPermissionMode="UseWindowsGroups" />
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="True" /><!-- Change this before deployment -->
</behavior>
</serviceBehaviors>
</behaviors>
答案 0 :(得分:0)
好的,这里没有答案,也没有MSDN订阅组的答案。
所以,我尝试了一切。我的意思是一切。看似好几天之后但实际上可能只有20个小时,它确实有效!
我所做的只是将服务文件(即.dll,.svc等)的物理路径移动到我的c:root与wwwroot之间的目录中并且它有效。我当然必须更新我的虚拟目录以指向它。
为什么这个位置会导致问题? IIS7.0 / Windows Server 2008是否会更改不允许从wwwroot的物理位置部署服务的内容?我可能永远都找不到,因为我永远不会尝试从那里部署另一项服务。
我对所有帐户/目录权限进行了三重检查,新物理路径中的权限与旧物理路径中的权限相同,因此没有那么好。
如果有人发现原因或知道原因。请让我/我们知道。
谢谢,
埃迪
答案 1 :(得分:0)
可能与this有关。