2

私はWCFが初めてで、その問題についてグーグルで検索しましたが、役に立ちませんでした。私は基本的に、トランスポートとして HTTPS を有効にした basicHttpBinding を使用して、WCF クライアント/サーバー アプリケーションを持っています。私が望むのは、さまざまな種類のデータ (つまり、さまざまなメッセージ) を 1 つの一般的な方法で送信できるようにすることです。WCF サービスでデータを次のように定義しています。

[DataContract]
public class Payment
{
[DataMember]
int Pay_id
{
    get { return Payment_Id; }
    set { Payment_Id = value; }
}
[DataMember]
...
etc.

Payment、fe Config、Update、Log 以外のクラスも用意します。WCF で [Operation Contract] メソッドを 1 つだけ作成して使用して、これらのカスタム クラス オブジェクトを送信することは可能ですか? お気に入り

SendMessage (Payment p); 
SendMessage (Config c); 

新しいタイプのメッセージごとに新しいメソッドを作成する代わりに、これは悪い設計選択 (拡張が難しい) だと思いますか? 今のところ、WCF クライアント プロキシでインスタンス化できるのは [OperationContract] メソッドの定義に記載されている型だけのようです。

SendMessage(GenericMessage message)

それなら使えない

Payment payment = new Payment();

Payment が GenericMessage の子クラスであっても、クライアントで。

4

3 に答える 3

3

この答えを確認してください:

WCF での汎用 DataContract の命名

また、次のような方法がある場合:

SendMessage(ParentClass object)

子クラス オブジェクトを使用できます。

class ChildClass : ParentClass

次のようなものを wcf クライアントに追加するだけです。

<system.runtime.serialization>
    <dataContractSerializer>
      <declaredTypes>
        <add type="Your.Namespace.ParentClass, Your.Assembly">
          <knownType type="Your.Namespace.ChildClass, Your.Asembly"/>
        </add>
      </declaredTypes>
    </dataContractSerializer>
  </system.runtime.serialization>

また、次の記事もご覧ください。

既知の型について

于 2012-07-05T06:35:41.547 に答える
0

基本クラスがあるシナリオがある場合 (この例では) 、操作コントラクトで次のようにKnownTypeGenericMessage属性を使用するだけです。

[OperationContract]
[KnownType(typeof(Payment))]
[KnownType(typeof(Config))]
SendMessage(GenericMessage message);

必要に応じて、構成で既知のタイプを指定することもできます。詳細については、 system.runtime.serialization configを参照してください。

理想的ではありませんが、うまくいきます。

完全に異なることを行う必要がある場合 (そのため、各タイプのオーバーロードがより適切になります) 、次のように OperationContractにNameを配置する必要があります。

[OperationContract(Name ="SendPayment")]
SendMessage (Payment p); 

[OperationContract(Name ="SendConfig")]
SendMessage (Config c); 
于 2012-07-05T06:37:16.350 に答える
0

Agathaにチェックインします。これはリクエスト/レスポンス パターンです。アクションごとにリクエスト/レスポンスがあります。クライアントで、リクエストを Dispatcher に追加すると、レスポンスを要求したり、リクエストをトリガーしたりできます。

于 2012-07-05T06:40:39.407 に答える