Jak Mogę ustawić serwer proxy HTTP (WebProxy)na serwerze proxy po stronie klienta WCF?

Jak mogę ustawić proxy HTTP programowo, na kliencie WCF, bez używania domyślnego proxy?

Proxy, Proxy, Proxy.

Zgodnie z modelem rozwoju WCF, generuję po stronie klienta " proxy" klas poprzez uruchomienie svcutil.exe na WSDL dla serwisu. (To także tworzy plik konfiguracyjny po stronie klienta).

W moim kodzie dodaję instancję tej klasy i mogę połączyć się z obsługa. Bardzo ładnie.

var svcProxy = new MyWebService();
svcProxy.GetInformation(request); 
Nazywamy to klasą proxy, ale istnieje inny proxy-proxy http. To usługa korzysta z wsHttpBinding basicHttpBinding, więc przechodzi http. Załóżmy, że chcę połączyć klienta z usługą sieciową przez serwer proxy http (modelowany przez System. Net. WebProxy w. NET BCL). Wiem. z mojego obszernego, przyjemnego doświadczenia w czytaniu dokumentacji. NET i WCF, że środowisko uruchomieniowe WCF, jeśli nie zostało to określone inaczej, użyje domyślnego serwer proxy systemu podczas komunikacji przez http / https.

Mogę ustawić to z wiersz poleceń w WinXP / 2003 z ProxyCfg.exe jak opisano tutaj , a w późniejszych wersje Windows z netsh.exe jak opisano tutaj .

Mogę również określić domyślne web proxy do użytku w aplikacji poprzez ustawienie właściwości System.Net.WebRequest.DefaultWebProxy .

Ale załóżmy, że chcę połączyć się przez proxy, które jest INNE niż systemowe proxy? Na przykład może nie ma systemowego proxy, ale Muszę użyć jednego do sieci usługi w szczególności. A może jest systemowego proxy, ale muszę użyć innego, dla sieci obsługa. I faktycznie może jest wiele klientów serwisów internetowych i każdy powinien dostać inny proxy.

Jak można ustawić proxy per-binding?

W modelu ASMX mógłbym to zrobić:

var svcProxy = new MyWebService();
svcProxy.Proxy = new System.Net.WebProxy("http://proxyserver:1234", true);
svcProxy.GetInformation(request); 

Ale nie jest to możliwe z WCF; serwer proxy po stronie klienta generowany przez WCF klasy nie ujawniają właściwości Proxy. Jak ustawić serwer proxy http po stronie klienta proxy, i jak ustawić uwierzytelnianie na proxy http, jak również?

Powiązane:
- how-to-set-proxy-with-credentials-to-generated-wcf-client

Author: Community, 2009-06-04

4 answers

Ustawienia proxy są częścią konfiguracji wiązania. Na przykład spójrz na Właściwość ProxyAddress klasy/elementy konfiguracji BasicHTTPBinding i WSHttpBinding.

Wygląda na to, że zostawiasz konfigurację punktu końcowego w aplikacji.plik konfiguracyjny, w którym to przypadku powinieneś być w stanie ustawić tam adres.

 21
Author: tomasr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-05 03:11:47

To ma sens, że nie ma właściwości Proxy na WCF proxy, ponieważ nie wszystkie proxy WCF używają HTTP do komunikacji. Po dalszej analizie stwierdziłem, że można programowo ustawić proxy w WCF, jeśli proxy WCF używa wiązania HTTP. Dokumentuję to tutaj na wypadek, gdyby ktoś inny tego potrzebował. Aby ustawić serwer proxy HTTP w kodzie dla klienta WCF, zrób to:

// 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;

I aby ustawić w kodzie adres punktu końcowego - gdzie dotrzeć do serwera-należy zrobić coś takiego:

var e = svc.Endpoint;
e.Address = new System.ServiceModel.EndpointAddress(
    "http://remoteserver:5555/WcfXmlElement");
 47
Author: Cheeso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 08:10:25

Miałem podobny problem, ale musiałem również użyć nazwy użytkownika i hasła dla serwera proxy, które różnią się od nazwy użytkownika i hasła używanego do uzyskania dostępu do usługi.

Próbowałem zbudować go przez UriBuilder, który wyświetli adres proxy jako " http://username:password@myproxyserver / ". Niestety, konkretny serwer proxy, którego używałem, nie działał z tą techniką.

Znalazłem po rozbudowanym Googlowaniu, że można zmienić proxy poprzez WebRequest.DefaultProxy (właściwość statyczna).

Na przykład:

WebProxy proxy = new WebProxy("http://myproxyserver",true);
proxy.Credentials = new NetworkCredential("username", "password");
WebRequest.DefaultWebProxy = proxy;
 17
Author: Martin Clarke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-26 07:57:45

Możesz też spróbować tego :

Programowo uzyskaj dowolne powiązanie, którego używasz, a następnie Ustaw na nim bezpośrednio proxy, np.

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

Gdzie "WSDualHttpBinding_IMainService" jest nazwą Twojego powiązania z pliku konfiguracyjnego. Musisz również ustawić UseDefaultWebProxy=false; w przeciwnym razie Twój proxy zostanie zignorowany.

 3
Author: Layinka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 08:13:46