[英]How to set proxy credentials to specific wcf client?
我需要连接到一些公共 wcf 服务,但是我和服务之间有一些代理。 如果我使用默认代理设置,例如
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
要么
HttpWebRequest.DefaultWebProxy
它工作得很好,但我不需要为整个应用程序设置代理设置,我需要为特定连接设置它。 那我该怎么做呢?
我看到了 ProxyAddress 属性
(client.Endpoint.Binding as BasicHttpBinding).ProxyAddress
但是没有任何凭据属性......我想以某种方式修改HttpWebRequest,但我不知道如何获得它......
解决了
谢谢大家的回答。
AntonK 的答案适合解决我的问题。
这个问题实际的时候,我也是用同样的方法解决的,只是没有使用web.config,写了这个方法
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;
}
这是一篇处理这个问题的文章。
总之,这就是如何在 web.config 中为特定服务设置代理。 在绑定配置中,设置proxyAddress="http://myproxy:8080"并设置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 更新到最新版本。
转到 NuGet 包管理器 -> 更新 WCF 的所有相关项目 URL 必须有:
System.ServiceModel.Security
System.ServiceModel.NetTcp
System.ServiceModel.Http
这适用于 .net core 2.1 版本。
你可以试试这个
HttpWebRequest request = HttpWebRequest.Create("URI") as HttpWebRequest;
var proxy = new WebProxy(HttpWebRequest.GetSystemWebProxy().GetProxy(request.RequestUri), true);
proxy.Credentials = new NetworkCredential(proxyUserName, proxyPassword, DomainName);
request.Proxy = proxy;
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.