私はいくつかのWCFサービスを使用するWebアプリケーションを持っています。私はさまざまな環境(dev、UAT、productionなど)で私のWebアプリケーションをデプロイします。各WCFサービスのURLは環境ごとに異なります。 .NET 3.5およびbasicHttpBinding
を使用しています環境に基づいてWCFサービス参照URLを変更する
Webアプリケーションは、web.configファイルのマシン固有の設定をサポートするフレームワークを使用しています。 web.configファイル内<system.serviceModel><bindings><basicHttpBinding><binding>
設定が複製されている。本質的に
System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress
:WCFサービスクライアントのインスタンスをインスタンス化するとき、私は引数を取るコンストラクタのオーバーロードを使用してWCFサービスクライアントのインスタンスを作成する関数を呼び出しますC#コードで。
このアプローチはうまくいきます。
ただし、X509証明書を使用するWCFサービスを使用するには、このアプローチを強化する必要があります。これは私がC#のコードでweb.configファイルで、以下の追加設定を複製する必要があることを意味します
<!-- inside the binding section -->
<security mode="Message">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
<behaviors>
<endpointBehaviors>
<behavior name="MyServiceBehaviour">
<clientCredentials>
<clientCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint" findValue="1234abcd" />
<serviceCertificate>
<defaultCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint" findValue="5678efgh" />
<authentication trustedStoreLocation="LocalMachine"
certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
私はいくつかの困難C#でこの設定をコーディングする方法を考え出すを持っています。
二つの質問
- 誰もが複数の環境間でのWCFサービス参照のURLを管理するためのより良い方法をお勧めしますか?
- また、C#で上記のweb.configのセクションを複製する方法上の任意の提案は
あなたの環境に基づいて名前を判断し、設定ファイルから適切な値を読み込むことができるように、名前付きバインディングなどを使うことができます。 –
次の質問は、これに関連しています。http://stackoverflow.com/questions/798684/programmatically-set-identity-on-wcf-endpointaddress –
私はあなたが設定ファイルではなくコードでこれをやっていることを認識していますが、なぜconfig適切な設定ファイル(Web.config.dev、Web.config.Test、Web.config.Releaseなど)に環境固有の設定を置きますか? – camainc