是否可以使用WsHttpBinding来通过基本身份验证代理?

时间:2009-05-18 11:47:06

标签: .net web-services

使用WSHttpBinding使用 基本 身份验证通过身份验证代理时遇到问题。

BasicHttpBinding的类似代码有效。我猜我的问题与我无法将WSHttpBinding的安全模式设置为 TransportCredentialOnly 的事实有关..

由于对MTOM的依赖,我无法使用BasicHttpBinding。

        binding.ProxyAddress = new Uri("http://192.168.20.231:8080");
        binding.BypassProxyOnLocal = true;
        binding.UseDefaultWebProxy = false;

        WSHttpSecurity security = binding.Security;

        //security.Mode = SecurityMode.TransportCredentialOnly; //This option only exist for BasichHttpBinding
        security.Mode = SecurityMode.Transport; // Not sure what to set here

        //security.Mode = SecurityMode.TransportWithMessageCredential;
        security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
        security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;


        var client = new SyncWcfMTOMServiceClient(binding, new EndpointAddress("http://server/service.svc"));

        client.ClientCredentials.UserName.UserName = "user";
        client.ClientCredentials.UserName.Password = "pass";
        bool running = client.IsServiceRunning();

2 个答案:

答案 0 :(得分:0)

我想在此指出的所有内容是安全的。如果您的目标服务托管在https(ssl)上,而不是您指定的网址,则使用传输

security.Mode = SecurityMode.Transport; // Not sure what to set here

答案 1 :(得分:0)

经过一些研究,我找到了答案。 (我对解决方案并不完全满意,并希望还有另一种解决方法)

wsHttpBinding 不允许以明文形式发送用户名和密码,甚至不允许向本地身份验证代理发送! basicHttpBinding 没有此问题

经过一些测试后,我发现我可以通过在托管服务器上安装服务器证书来使其工作(不要与代理服务器混淆)。

通过在服务器上安装SSL证书,上面的代码无需修改即可运行。服务器上的SSL为我带来了许多问题。

解决此问题的其他任何方法?