1

我在使用 IIS 5.1 的 Win XP 上运行的 ASMX Web 服务存在一些问题。IIS 设置有集成 Windows 身份验证并禁用匿名访问。(当我启用匿名访问时,一切都像魅力一样。)

但是,当我关闭匿名访问并在 IIS 上仅使用集成 Windows 身份验证运行时,我收到以下异常:

HTTP 请求未经客户端身份验证方案“协商”的授权。从服务器收到的身份验证标头是“协商,NTLM”。

这个异常是由我用来测试概念的非常简单的控制台应用程序生成的:

        BasicHttpBinding binding = new BasicHttpBinding();
        binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; // .None;
        binding.UseDefaultWebProxy = false;

        EndpointIdentity spn = EndpointIdentity.CreateSpnIdentity("WORKGROUP/VirtualXP-91051");
        Uri uri = new Uri("http://169.254.91.91/MyWebSite/MyService.asmx");

        EndpointAddress address = new EndpointAddress(uri, spn);

        MyServiceSoapClient client = new MyServiceSoapClient(binding, address);
        client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

        String req = "( the request string is blanked out.. ;) )";
        string resp = client.ReqAddressData(req);

        Console.WriteLine(resp);
        Console.ReadLine();

App.config 中有趣的部分:

                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>

这不是火箭科学,所以我一定遗漏了一些明显的东西。我已经在 SO 上进行了一些搜索,尽管我可以找到许多类似的问题,但我没有发现任何可以解决我的问题的问题。

4

0 回答 0