我有一个WCF服务,使用该服务的客户端。 他们使用与MTOM消息编码WsHttpBinding的。 客户端不会在代码中使用一个app.config文件,并执行所有的端点配置的。 它所有的工作很好,而在正常环境中,但是我现在有一些谁是试图从后面的HTTP代理服务器连接到服务的用户。 每当他们尝试连接,他们获得了407(需要代理身份验证)的警告。
我已经成功使用虚拟机连接到代理服务器的专用网络,以建立自己的测试环境,所以我可以模仿他们所看到的东西。 我试过设置在app.config中的system.net useDefaultCredentials财产,但似乎没有任何效果。 我已经研究正在发送的数据包,并且不包含任何代理认证头。 通过代理纵观网络流量,他们使用该头。
我也试着硬编码的代理服务器到客户端,而是提供了一个“无法连接到服务器”异常。 检查数据包,客户端发送了3周小的的代理,其中没有一个是HTTP请求,仅此而已。 我不知道它在做什么在那里。
我还跟竟然消息检查添加到客户端,并手动注入所需的头到请求,但没有显示在页眉起来。
我在这里打我的绳子结束,我真的需要一个解决方案。 对我缺少的是什么在这里的任何想法或解决方案?
这( WCF服务具有的wsHttpBinding -操纵HTTP请求头 )很有前途,但我仍然坚持。
编辑:这里是代码的一部分。
var binding = new WSHttpBinding();
binding.MaxReceivedMessageSize = 100000000;
binding.MessageEncoding = WSMessageEncoding.Mtom;
binding.ReaderQuotas.MaxArrayLength = 100000000;
binding.OpenTimeout = new TimeSpan(0, 2, 0);
binding.ReceiveTimeout = new TimeSpan(0, 2, 0);
binding.SendTimeout = new TimeSpan(0, 2, 0);
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
binding.UseDefaultWebProxy = true;
// I've also tried setting this to false, and manually specifying the binding.ProxyAddress
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
var endpointAddress = new EndpointAddress(new Uri(hostUrl));
clientProxy_ = new UpdaterServiceProxy(binding, endpointAddress);
// this behavior was the attempt to manually add the Proxy-Authentication header
//clientProxy_.Endpoint.Behaviors.Add(new MyEndpointBehavior());
clientProxy_.ClientCredentials.UserName.UserName = userName;
clientProxy_.ClientCredentials.UserName.Password = password;
clientProxy_.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode =
System.ServiceModel.Security.X509CertificateValidationMode.ChainTrust;
// do stuff...