У меня есть служба WCF и клиент, который использует эту службу. Они используют WSHttpBinding с кодировкой сообщений MTOM. Клиент не использует файл app.config и выполняет всю конфигурацию конечной точки в коде. Все работает довольно хорошо в обычной среде, однако теперь у меня есть некоторые пользователи, которые пытаются подключиться к службе из-за http-прокси. Всякий раз, когда они пытаются подключиться, они получают предупреждение 407 (требование прокси-аутентификации).Получение WSHttpBinding, работающего через HTTP-прокси
Мне удалось настроить собственную среду тестирования с помощью виртуальной машины с частной сетью, которая соединяется с прокси-сервером, поэтому я смогу имитировать то, что они видят. Я попытался установить свойство system.net useDefaultCredentials в app.config, но это, похоже, не имеет никакого эффекта. Я рассмотрел отправленные пакеты и не содержит заголовков прокси-аутентификации. Рассматривая веб-трафик через прокси-сервер, они используют этот заголовок.
Я также пытался жестко кодировать прокси-сервер в клиенте, но это дает исключение «не может подключиться к серверу». Рассматривая пакеты, клиент отправляет 3 небольших прокси-сервера, ни один из которых не является HTTP-запросом, и все. Я не уверен, что он там делает.
Я даже зашел так далеко, чтобы добавить к клиенту инспектор сообщений и вручную ввести требуемый заголовок в запросы, но это не отображается в заголовке.
Я нахожусь в конце моей веревки здесь, и мне действительно нужно решение. Любые идеи о том, что мне здесь не хватает, или решение?
Это (WCF Service with wsHttpBinding - Manipulating HTTP request headers) кажется многообещающим, но я все еще застрял.
EDIT: Вот часть кода.
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...