Webサービスを呼び出すと、このエラーが発生します。
「リモートサーバーがエラーを返しました:(407)プロキシ認証が必要です」。
私は一般的なアイデアを得て、追加することでコードを動作させることができます
myProxy.Credentials = NetworkCredential("user", "password", "domain");
または、コードでDefaultCredentialsを使用します。私の問題は、Webサービスへの呼び出しがこれなしで本番環境で機能することです。
Machine.configに関係する非コードソリューションがあるようですが、それは何ですか?現時点では、プロダクションボックスのmachine.configファイルにアクセスして、その外観を確認することはできません。 machine.configを次のように更新しようとしましたが、407エラーが発生します。
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<bypasslist>
<clear />
</bypasslist>
<proxy proxyaddress="myproxy:9000"
usesystemdefault="false"
bypassonlocal="true"
autoDetect="False" />
</defaultProxy>
</system.net>
これを設定に追加するだけです
<system.net>
<defaultProxy useDefaultCredentials="true" >
</defaultProxy>
</system.net>
次のコードでは、資格情報をハードコーディングする必要はありません。
service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
ファイアウォールの専門家に確認してください。 PRODサーバーのファイアウォールを開くため、プロキシを使用する必要はありません。
あなたのヒントが私の問題を解決するのを助けてくれてありがとう:
407エラーを回避するには、2つの場所に資格情報を設定する必要がありました。
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password", "domain");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");
そして出来上がり!
おそらくprodのマシンまたはweb.configの構成に設定があります。おそらくプロキシタグは必要ないでしょう。
<system.net>
<defaultProxy useDefaultCredentials="true" >
<proxy usesystemdefault="False"
proxyaddress="http://<ProxyLocation>:<port>"
bypassonlocal="True"
autoDetect="False" />
</defaultProxy>
</system.net>
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password");
成功です。
同様のプロキシ関連の問題がありました。私の場合、追加するだけで十分でした:
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");