Wcf 无法满足对安全令牌的请求,因为身份验证失败

Wcf 无法满足对安全令牌的请求,因为身份验证失败,wcf,Wcf,我得到了一个在共享环境中托管的WCF服务(我们从一家web托管公司租用空间,但我们有一个专用的应用程序池),我得到了一个调用WCF服务的asp.net web应用程序。这两个项目都是.NET4项目 如果我从VS2010运行我的web应用程序,我可以轻松地进行wcf调用。但是,如果我在共享环境中发布网站并从那里调用wcf,我会遇到例外情况 例外情况详情: [FaultException:由于身份验证失败,无法满足对安全令牌的请求。] System.ServiceModel.Security.Sec

我得到了一个在共享环境中托管的WCF服务(我们从一家web托管公司租用空间,但我们有一个专用的应用程序池),我得到了一个调用WCF服务的asp.net web应用程序。这两个项目都是.NET4项目

如果我从VS2010运行我的web应用程序,我可以轻松地进行wcf调用。但是,如果我在共享环境中发布网站并从那里调用wcf,我会遇到例外情况

例外情况详情:

[FaultException:由于身份验证失败,无法满足对安全令牌的请求。] System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(消息消息,端点地址目标)+5499790 System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextToutGoingMessageBody(消息输入消息,SspiNegotiationTokenProviderState sspiState)+49

[SecurityNegotiationException:服务未对调用方进行身份验证。] System.Runtime.Remoting.proxy.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)+9464367 System.Runtime.Remoting.proxy.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)+345

我也在我的本地机器上发布了这个网站,它也很有效

以下是我在服务器端的配置:

<wsHttpBinding>
            <binding name="wsHttpBinding" closeTimeout="00:01:00"
                     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                     transactionFlow="false"
                     hostNameComparisonMode="StrongWildcard"
                     maxBufferPoolSize="2147483647"
                     maxReceivedMessageSize="2147483647">
               <readerQuotas maxDepth="2147483647"
                                          maxStringContentLength="2147483647"
                                          maxArrayLength="2147483647"
                                          maxBytesPerRead="2147483647"
                                          maxNameTableCharCount="2147483647" />
            </binding>
        </wsHttpBinding>

客户端代码:

 factory.Credentials.Windows.Username = "user";
 factory.Credentials.Windows.Password = "psw";
 factory = new ChannelFactory<IService>(binding, serviceAddress);
 factory.Open();
 service = factory.CreateChannel();
factory.Credentials.Windows.Username=“user”;
factory.Credentials.Windows.Password=“psw”;
工厂=新的ChannelFactory(绑定,serviceAddress);
factory.Open();
service=factory.CreateChannel();
我想使用wsHttpBinding而不是basicHttpBinding,而且我确实需要一些安全性,所以我不想将安全模式设置为None

Windows 2008 R2上的IIS版本为7,并设置为允许匿名身份验证。Asp.net模拟已禁用

我不认为这些设置有任何错误,因为如果我从VS2010运行web站点项目,它确实可以工作

谢谢你的帮助


Xiaosu

仅当客户端和服务器(即网站和服务)位于同一Windows域或同一计算机上时,才支持Windows客户端凭据。SSPI协商或Kerberos协商在不受信任的计算机/域之间不起作用。

双方的安全模式: