如何为特定的 wcf 客户端设置代理凭据? [英] How to set proxy credentials to specific wcf client?

查看:20
本文介绍了如何为特定的 wcf 客户端设置代理凭据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要连接到一些公共 wcf 服务,但是我和服务之间有一些代理.如果我使用默认代理设置,例如

I need to connect to some public wcf service, but there is some proxy between me and service. If i use default proxy settings such as

<system.net>
  <defaultProxy useDefaultCredentials="true" />
</system.net>

HttpWebRequest.DefaultWebProxy

它工作得很好但我不需要为整个应用程序设置代理设置,我需要为特定连接设置它.那我该怎么做?

it works perfectly fine but i don't need to set proxy settings for entire application, i need to set it for specific connection. So how I can do that?

我看到了 ProxyAddress 属性

I saw ProxyAddress property

(client.Endpoint.Binding as BasicHttpBinding).ProxyAddress

但是没有任何凭据属性...我想以某种方式修改HttpWebRequest,但我不知道如何获得它...

but there is no any properties for credentials... I was thinking to somehow modify HttpWebRequest, but I do not know how to get it...

已解决

谢谢大家的回答.

AntonK 的答案适合解决我的问题.

Answer of AntonK suitable for solving my problem.

实际这个问题的时候,我也是用同样的方法解决的,但是没有使用web.config,写了这个方法

At the time when this question was actual, I solved it in the same way, but without the use of web.config and wrote this method

void SetProxySettings<TChannel>(ClientBase<TChannel> client, 
    bool useProxy, string address, int port, string login, string password) 
    where TChannel : class
{
    if (!useProxy) return;
    var b = client.Endpoint.Binding as BasicHttpBinding;
    if (b == null)
    {
        System.Diagnostics.Debug.WriteLine("Binding of this endpoint is not BasicHttpBinding");
        return;
    }
    b.ProxyAddress = new Uri(string.Format("http://{0}:{1}", address, port));
    b.UseDefaultWebProxy = false; // !!!
    b.Security.Mode = BasicHttpSecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; // !!!
    b.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic; // !!!
    if (client.ClientCredentials == null) return;
    client.ClientCredentials.UserName.UserName = login;
    client.ClientCredentials.UserName.Password = password;
}

推荐答案

这是一篇处理这个问题的文章.

Here's an article dealing with this issue.

http://blogs.msdn.com/b/stcheng/archive/2008/12/03/wcf-how-to-supply-dedicated-credentials-for-webproxy-authentication.aspx

总而言之,这是如何在 web.config 中为特定服务设置代理.在绑定配置中,设置 proxyAddress="http://myproxy:8080" 并设置 useDefaultWebProxy="false"

In summary, this is how to set a proxy for a specific service in the web.config. In the binding config, set proxyAddress="http://myproxy:8080" and set useDefaultWebProxy="false"

<bindings>
  <basicHttpBinding>
     <binding name="SubscriberFulfilmentServiceSOAP12Binding" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"
      allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
      textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="false"
proxyAddress="http://myproxy:8080"
      messageEncoding="Text">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
        maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

这篇关于如何为特定的 wcf 客户端设置代理凭据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆