How can I set an HTTP Proxy (WebProxy) on a WCF client-side Service proxy?

后端 未结 5 654
孤独总比滥情好
孤独总比滥情好 2020-11-29 00:57

How can I set the HTTP proxy programmatically, on a WCF client, without using the default proxy?

Proxies, proxies, proxies.

According to the WCF model of

相关标签:
5条回答
  • 2020-11-29 01:24

    I found a solution for someone who might use .NET Core 2.x

    Which initially cause an issue when trying to set proxy by using

    System.ServiceModel.BasicHttpBinding;

    as answered by Cheeso.

    You have to update WCF to the latest (v.4.7.0).

    Go to NuGet Package Manager -> Update all related Project URL of WCF.

    There must be:

    • System.ServiceModel.Security
    • System.ServiceModel.NetTcp
    • System.ServiceModel.Http
    0 讨论(0)
  • 2020-11-29 01:25

    The proxy settings are part of the binding configuration. For example, look at the ProxyAddress property of the BasicHTTPBinding and WSHttpBinding classes/configuration elements.

    Looks like you're leaving your endpoint configuration in the app.config file, in which case you should be able to set the address there.

    0 讨论(0)
  • It makes sense that there is no Proxy property on the WCF proxy, because not all WCF proxies use HTTP for communication. After further review, I found that it is possible to set the proxy in WCF programmatically, if the WCF proxy uses an HTTP binding. I am documenting it here in case someone else needs it. To set the HTTP Proxy in code for a WCF client, do this:

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

    And to set the endpoint address - where to reach the server - in code, you would do something like this:

    var e = svc.Endpoint;
    e.Address = new System.ServiceModel.EndpointAddress(
        "http://remoteserver:5555/WcfXmlElement");
    
    0 讨论(0)
  • 2020-11-29 01:25

    I have had a similar problem, but I also needed to use a username and password for the proxy that differ from the username and password used to access the service.

    I tried building it up through a UriBuilder, which would output the proxy address as "http://username:password@myproxyserver/". Unfortunately, the particular proxy I was using didn't work with this technique.

    What I found after extensive Googling, is that you can change the proxy through WebRequest.DefaultProxy (static property).

    For example:

    WebProxy proxy = new WebProxy("http://myproxyserver",true);
    proxy.Credentials = new NetworkCredential("username", "password");
    WebRequest.DefaultWebProxy = proxy;
    
    0 讨论(0)
  • 2020-11-29 01:33

    You could also try this :

    Programmatically get whatever binding you are using,and then set the proxy on it directly e.g.

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

    where "WSDualHttpBinding_IMainService" is the name of your binding from your config file. Also you have to set UseDefaultWebProxy=false; otherwise your proxy will be ignored.

    0 讨论(0)
提交回复
热议问题