总之我的情况是,像这样:
ASP.NET网站 - > WCF服务 - > WCF服务,一路模仿?
- 用户触发了Web浏览器的行为,这会导致Web服务器调用Ajax Web服务(服务器A)。
- Web服务器发出到WCF服务的调用,托管在IIS(服务器B)
- WCF服务发布到另一个WCF服务的调用,托管在IIS(服务器C)
所有网站都通过http暴露,而不是https。
现在,服务器C需要知道用户是谁在另一端。到目前为止,我的工作是这样的,WCF服务调用服务器B是在模拟下执行的,所以服务器B有一个代表用户的WindowsIdentity
对象。然而,当我尝试从服务器B上的服务呼叫调用到服务器C下的模拟,我得到以下回:
System.ComponentModel.Win32Exception: No credentials are available in the security package
Server stack trace:
at System.IdentityModel.SspiWrapper.AcquireCredentialsHandle(String package, CredentialUse intent, AuthIdentityEx& authdata)
at System.ServiceModel.Security.SecurityUtils.GetCredentialsHandle(String package, NetworkCredential credential, Boolean isServer, String[] additionalPackages)
at System.ServiceModel.Security.SpnegoTokenProvider.OnOpening()
at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpening()
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open(TimeSpan timeout)
at System.ServiceModel.Security.SecurityUtils.OpenTokenProviderIfRequired(SecurityTokenProvider tokenProvider, TimeSpan timeout)
at System.ServiceModel.Security.SymmetricSecurityProtocol.OnOpen(TimeSpan timeout)
at System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.SecurityChannelFactory`1.ClientSecurityChannel`1.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
扭捏服务绑定感觉我像在冰上行走这么瘦,我几乎走在水,所以让我们从我迄今为止失败的事情中无视,并从一张干净的纸张开始。
我应该如何配置服务与对方(和我)很好地玩?
用户是xkcd的家伙吗? :-) – 2010-05-31 14:10:42