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
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.
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");
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;
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.
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