我有一个WCF服务和一个使用该服务的客户端。他们使用WSHttpBinding和MTOM消息编码。客户端不使用app.config文件,并执行代码中的所有端点配置。 它在正常的环境中都能很好地工作,但是现在有一些用户试图从http代理后面连接到服务。每当他们尝试连接时,他们都会得到一个407(需要代理身份验证)警告。通过http代理获取WSHttpBinding
我设法建立了自己的测试环境,使用虚拟机和连接到代理的专用网络,因此我可以模拟他们所看到的。 我已经尝试在app.config中设置system.net useDefaultCredentials属性,但这似乎没有任何效果。我检查了正在发送的数据包,并且它们不包含任何代理验证标头。通过代理查看网络流量,他们确实使用该标题。
我也尝试了将代理服务器硬编码到客户端,但这给出了“无法连接到服务器”异常。检查数据包,客户端发送3个小的代理,其中没有一个是http请求,就是这样。我不确定那里有什么。
我甚至为了添加一个消息检查器到客户端,并手动将所需的头插入到请求中,但是这并没有显示在头中。
我在这里碰到了我的绳索,我真的需要一个解决方案。关于我在这里失踪的任何想法或解决方案?
这(WCF Service with wsHttpBinding - Manipulating HTTP request headers)似乎很有希望,但我仍然坚持。编辑: 这是一部分代码。
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...