6

元:

[ServiceContract(Namespace = "@services.url@/",
        Name = "FedExContract")]

実行時に「@services.url@」の値を変更する必要があります。

4

2 に答える 2

0

実行時に変更できます。しかし、それは大変な作業であり、サービス開始前に行わなければなりません。サービス開始後の契約情報の変更はできません。

個人的には、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";
};

管理が簡単で、どの名前空間が使用されているかを常に把握でき、サービスは常に開始されます。それは動作しますか?

于 2012-05-15T02:47:44.517 に答える
0

条件付きコンパイル シンボルを使用する以外に考えられない、つまり

#if Debug 
[ServiceContract(Namespace = "@AA.BBB@/", Name = "FedExContract")]

#endif 

コントラクトの名前空間を変更すると、クライアント プロキシを再作成する必要がある場合があるため、名前空間は静的であることを意図しています。

于 2012-05-14T15:06:07.090 に答える