Как установить HTTP-прокси (WebProxy) на прокси-сервере службы WCF на стороне клиента?

Как я могу установить HTTP-прокси программно, на клиенте WCF, без использования прокси по умолчанию?

Прокси, прокси, прокси.

в соответствии с моделью разработки WCF я генерирую клиентский " прокси" классы, запустив svcutil.exe на WSDL для службы. (Это тоже создает файл конфигурации на стороне клиента).

в моем коде я создаю экземпляр этого класса, и я могу подключиться к услуга. Очень симпатичный.

var svcProxy = new MyWebService();
svcProxy.GetInformation(request); 

мы называем это вещь прокси-класса, но есть еще один прокси - сервер-http proxy. Этот служба использует wshttpbinding basicHttpBinding, поэтому она переходит http. Теперь предположим, что я хочу подключить клиента к веб-службе через HTTP-прокси (моделируется системой.Сеть.WebProxy в .NET BCL). Я знаю из моего обширного, восхитительного опыта чтения документации .NET и WCF, что среда выполнения WCF, если не указано иное, будет использовать значение по умолчанию системный прокси при общении через http / https.

Я могу установить это из командной строки в WinXP / 2003 С введите proxycfg.exe как описано здесь, и в более поздних версий Windows С помощью netsh.exe как описано здесь.

Я могу также указать веб-прокси по умолчанию для использования в приложении установив

4 ответов


параметры прокси-сервера являются частью обязательной комплектации. Например, посмотрите на ProxyAddress свойства BasicHTTPBinding и привязка wshttpbinding классов/элементы конфигурации.

Похоже, вы оставляете конфигурацию конечной точки в приложении.файл конфигурации, в этом случае вы должны иметь возможность установить адрес там.


имеет смысл, что на прокси-сервере WCF нет свойства Прокси, потому что не все прокси-серверы WCF используют HTTP для связи. После дальнейшего рассмотрения я обнаружил, что можно установить прокси-сервер в WCF программно, если прокси-сервер WCF использует привязку HTTP. Я документирую это здесь на случай, если кому-то еще это понадобится. Чтобы задать HTTP-прокси в коде для клиента WCF, сделайте следующее:

// instantiate a proxy for the service
var svc= new ServiceClient();
// get the HTTP binding
var b = svc.Endpoint.Binding as System.ServiceModel.BasicHttpBinding;
b.ProxyAddress = new Uri("http://127.0.0.1:8888");
b.BypassProxyOnLocal = false;
b.UseDefaultWebProxy = false;

и чтобы установить адрес конечной точки-где добраться до сервера - в коде, вы бы сделали что-то вроде этого:--3-->

var e = svc.Endpoint;
e.Address = new System.ServiceModel.EndpointAddress(
    "http://remoteserver:5555/WcfXmlElement");

У меня была аналогичная проблема, но мне также нужно было использовать имя пользователя и пароль для прокси, которые отличаются от имени пользователя и пароля, используемых для доступа к службе.

Я попытался создать его через UriBuilder, который выведет адрес прокси как"http://username:password@myproxyserver/". К сожалению, конкретный прокси, который я использовал, не работал с этой техникой.

что я нашел после обширного Googling, это то, что вы можете изменить прокси через WebRequest.DefaultProxy (статические свойства).

например:

WebProxy proxy = new WebProxy("http://myproxyserver",true);
proxy.Credentials = new NetworkCredential("username", "password");
WebRequest.DefaultWebProxy = proxy;

вы также можете попробовать это:

программно получите любую привязку, которую вы используете, а затем установите прокси-сервер на нем напрямую, например

var binding = new WSDualHttpBinding("WSDualHttpBinding_IMainService");
binding.ProxyAddress = new Uri("http://192.168.5.1:3128");

здесь "WSDualHttpBinding_IMainService" - это имя привязки из файла конфигурации. Также вы должны установить UseDefaultWebProxy=false; в противном случае ваш прокси будет игнорироваться.