HTTP请求未经授权使用客户端身份验证方案' Ntlm'。从服务器收到的身份验证标题是“NTLM'

时间:2012-06-13 15:44:15

标签: asp.net wcf iis-7 ntlm

这让我发疯了。 我正在尝试通过ASP.NET Web表单访问WCF服务, 我正在设置channelfactory的绑定,如下所示:

BasicHttpBinding b = null;
        if (Communication.SlServiceURL.StartsWith("https"))
            b = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        else
        {
            b = new BasicHttpBinding();
            b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        }
        b.MaxBufferSize = 2147483647;
        b.MaxReceivedMessageSize = 2147483647;
        b.Security.Transport = new HttpTransportSecurity { ClientCredentialType = HttpClientCredentialType.Ntlm, ProxyCredentialType = HttpProxyCredentialType.None };
        b.Security.Message = new BasicHttpMessageSecurity { ClientCredentialType = BasicHttpMessageCredentialType.UserName };

然后我通过

创建一个新的Channel Wrapper
public ClientChannelWrapper(Binding binding, EndpointAddress remoteAddress)
    {
        m_Factory = new ChannelFactory<T>(binding, remoteAddress);
    }

我正在传递绑定和https:// [myservice] /myservice.svc URL作为remoteAddress。

问题是:当我使用IIS 7在我的生产服务器中调用服务时,在站点上启用了Windows身份验证,并且只有“NTLM”作为身份验证的提供者,其他所有内容都被禁用(没有匿名,表单等) 我得到了例外:

异常类型:MessageSecurityException

异常消息:HTTP请求未经授权使用客户端身份验证方案“Ntlm”。从服务器收到的身份验证标头是“NTLM”。

这很奇怪,我似乎无法找到解决方法。我还有一个在另一个ASP.NET表单中托管的silverlight应用程序,它在这个绑定工作正常,这让我感到非常震惊,因为为什么同样的东西在同一个IIS站点中托管的ASP.NET站点中工作。

同样奇怪:当从Visual Studio使用F5启动站点时,它在IIS7计算机中访问生产WCF服务时有效。一旦我部署了网站,我就会得到例外。

编辑:现在很清楚为什么Silverlight的行为与ASP.NET不同,因为Silverlight直接通过客户端计算机与服务进行通信。除了例外,仍然没有运气。

0 个答案:

没有答案