問題をほぼ解決する wal のアプローチを試しましたが、クリック 1 回の展開で問題が発生しました。wal の回答に対する私のコメントを参照してください。
現在使用しているソリューションは、この投稿で提案されている条件付きコンパイルです。
http://www.codeproject.com/Articles/451734/Visual-Studio-Use-Conditional-Compilation-to-Contr
利点は、クリック 1 回で問題なく動作することとは別に、VS プロジェクト ファイルを微調整したり、サードパーティのコンポーネントを使用したりする必要がないことです。欠点は、エンドポイントを追加/変更する場合、ソース コードを更新する必要があることです。
私たちがしたことは、新しい.settingsファイルをプロジェクトに追加することでした。これは必須ではありませんが、このファイルを微調整する必要があるため、エンドポイント構成を別の設定ファイルに保持することをお勧めします。条件付きコンパイルを使用して、コンパイルが有効になっている構成に基づいて正しいエンドポイントを有効にするように調整されています。
public ServiceSettings() {
// // To add event handlers for saving and changing settings, uncomment the lines below:
//
// this.SettingChanging += this.SettingChangingEventHandler;
//
// this.SettingsSaving += this.SettingsSavingEventHandler;
//
// Each method corrsponds to a build version. We call all four methods, because
// the conditional compilation will only compile the one indicated:
this.SetLocalApplicationSettings();
this.SetAS12ApplicationSettings();
}
[Conditional("LOCAL")]
private void SetLocalApplicationSettings()
{
this["LoginAddress"] = "https://localhost/services/loginservice";
this["SettingsAddress"] = "https://localhost/services/settingsservice";
}
[Conditional("EXAMPLE")]
private void SetAS12ApplicationSettings()
{
this["LoginAddress"] = "https://example.com/services/loginservice";
this["SettingsAddress"] = "https://example.com/services/settingsservice";
}
VS では、エンドポイントごとに 1 つの構成を作成し、[ビルド] タブで適切な条件付きコンパイル シンボル (LOCAL または EXAMPLE) を定義しました。
また、設定ファイルで定義されたエンドポイントを使用するように、VS によって生成された WS クライアント クラスを使用してコードを更新しました。
var client = new SettingsServiceClient("SettingsServiceImplPort",
ServiceSettings.Default.SettingsAddress);
app.config では、デフォルトの構成 (localhost) とバインド構成を保持して、VS を満足させます。
<system.serviceModel>
<bindings>
<customBinding>
<binding name="SettingsServiceImplServiceSoapBinding">
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport />
</binding>
<binding name="LoginServiceImplServiceSoapBinding">
<textMessageEncoding messageVersion="Soap12" />
<httpsTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://localhost/services/settingsservice"
binding="customBinding" bindingConfiguration="SettingsServiceImplServiceSoapBinding"
contract="SettingsServiceReference.SettingsService" name="SettingsServiceImplPort" />
<endpoint address="https://localhost/services/loginservice"
binding="customBinding" bindingConfiguration="LoginServiceImplServiceSoapBinding"
contract="LoginServiceReference.LoginService" name="LoginServiceImplPort" />
</client>
</system.serviceModel>
<applicationSettings>
<ConfigurationTest.ServiceSettings>
<setting name="SettingsAddress" serializeAs="String">
<value>https://localhost/services/settingsservice</value>
</setting>
<setting name="LoginAddress" serializeAs="String">
<value>https://localhost/services/loginservice</value>
</setting>
</ConfigurationTest.ServiceSettings>
</applicationSettings>