元:
[ServiceContract(Namespace = "@services.url@/",
Name = "FedExContract")]
実行時に「@services.url@」の値を変更する必要があります。
実行時に変更できます。しかし、それは大変な作業であり、サービス開始前に行わなければなりません。サービス開始後の契約情報の変更はできません。
個人的には、DBに依存したサービス開始は好きではありません。何かが壊れた場合、サービスは起動せず、トラブルシューティングは IT にとって複雑なプロセスになる可能性があります。ランタイム ルートに進む場合は、名前空間の値を構成ファイルに保存します。シンプルに保ち、質問で説明したように、デプロイ後のトークンの置き換えを有効にします。
コメントから、ビルドプロセスについて言及しています。処理方法は次のとおりです。名前空間を定数文字列にします。たとえば、次のようになります。
[DataContract(Namespace=Constants.CURRENT_NAMESPACE]
public class MyClass
{ }
別のファイルで次のように宣言します。
// in a separate file define:
public static class Constants
{
public const string CURRENT_NAMESPACE = "url://Services";
};
別の環境用にビルドする場合は、Constants ファイルを新しい定義に交換します。
//As a part of your build process switch the Constants file:
public static class Constants
{
public const string CURRENT_NAMESPACE = "url://Eclipse/Services";
};
管理が簡単で、どの名前空間が使用されているかを常に把握でき、サービスは常に開始されます。それは動作しますか?
条件付きコンパイル シンボルを使用する以外に考えられない、つまり
#if Debug
[ServiceContract(Namespace = "@AA.BBB@/", Name = "FedExContract")]
#endif
コントラクトの名前空間を変更すると、クライアント プロキシを再作成する必要がある場合があるため、名前空間は静的であることを意図しています。