プロキシ経由で別のマシンのWebサービスにアクセスするようにWebサイトを構成する必要があります。プロキシを使用するようにWebサイトを構成できますが、プロキシが必要とする資格情報を指定する方法が見つかりません、それは可能ですか?現在の構成は次のとおりです。
<defaultProxy useDefaultCredentials="false">
<proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>
コードを使用してこれを実行できることはわかっていますが、Webサイトで実行しているソフトウェアはクローズドソースのCMSであるため、実行できません。
これを行う方法はありますか? MSDNは私をあまり助けてくれません。
はい、現在のコードを変更せずに独自の資格情報を指定することができます。ただし、一部のコードの一部が必要です。
このクラスでSomeAssembly.dllというアセンブリを作成します。
namespace SomeNameSpace
{
public class MyProxy : IWebProxy
{
public ICredentials Credentials
{
get { return new NetworkCredential("user", "password"); }
//or get { return new NetworkCredential("user", "password","domain"); }
set { }
}
public Uri GetProxy(Uri destination)
{
return new Uri("http://my.proxy:8080");
}
public bool IsBypassed(Uri Host)
{
return false;
}
}
}
これを設定ファイルに追加してください:
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type = "SomeNameSpace.MyProxy, SomeAssembly" />
</defaultProxy>
これにより、リストに新しいプロキシが「挿入」されます。デフォルトの資格情報がないため、WebRequestクラスは最初にコードを呼び出して、独自の資格情報を要求します。アセンブルSomeAssemblyをCMSアプリケーションのbinディレクトリに配置する必要があります。
これはなんらかの静的コードであり、ユーザー、パスワード、URLなどのすべての文字列を取得するには、独自の ConfigurationSection を実装するか、 AppSettings に情報を追加する必要があります=、これははるかに簡単です。
Web.configでプロキシネットワーク資格情報を指定する良い方法を見つけていませんが、web.configにこれを含めることで、非コーディングソリューションを引き続き使用できることがわかります。
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
</defaultProxy>
</system.net>
これを実現するための重要な要素は、IIS設定を変更し、プロセスを実行するアカウントがプロキシサーバーにアクセスできるようにすることです。プロセスがLocalServiceまたはNetworkServiceで実行されている場合、ドメインアカウントが必要になる可能性があります。
Windows Credentials Managerでプロキシサーバーの新しい汎用資格情報を追加することにより、資格情報を指定できます。
1 Web.configで
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
インターネットまたはネットワークアドレス:プロキシアドレス
ユーザー名:ユーザー名
パスワード:合格
この構成は、コードを変更することなく機能しました。
この目的のために、ディレクトリサービス/ LDAPルックアップを使用できます。インフラストラクチャレベルでのいくつかの変更が含まれますが、ほとんどの実稼働環境にはそのようなプロビジョニングがあります