いくつかのパブリック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 Package Managerに移動します-> WCFの関連するすべてのプロジェクトURLを更新します。
System.ServiceModel.Security
System.ServiceModel.NetTcp
System.ServiceModel.Http
これは、.netコア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;
それが役に立てば幸い