0

私は現在、一連のWCFサービス参照と対話するためのWCFクライアントを開発しています。私はC#で開発しています。

svc utilを使用してサービス参照を生成したり、クラスライブラリにサービス参照を手動で追加したりするというアプローチには従いたくありません。

私は他の選択肢を私に開いていますか?ServiceModelライブラリ内でServiceClientクラスを使用することを検討しています。

たとえば、エンドポイントに関連するリクエストオブジェクトとレスポンスオブジェクトはどこで作成されますか、またはどのように作成されますか?以前のプロジェクトでは、T4マッピングとDTOを使用しましたが、これらはやり過ぎだと感じています。異なるサービスエンドポイント間で同じオブジェクトを共有できるのが好きでした。ここでの私の目標は、カスタムで作成されたプロキシを介して通信するカスタムクライアントオブジェクトを作成することです。これについていくつかの方向性を教えてください。

4

1 に答える 1

0

WCF サービス (エンドポイント) と通信するには、エンドポイントのアドレス、エンドポイントが使用するバインディング通信で使用されるコントラクトの 3 つ (ABC) を知る必要があります。これら 3 つがすべて揃っていれば、ツールを使用してサービスを操作する必要はありません。

アドレスは、エンドポイントの URI です。バインディングは、抽象System.ServiceModel.Channels.Bindingクラス ( など)の 1 つのインスタンスによって表されます。そして、コントラクトは通常、属性で装飾されたインターフェースによって表されます。これら 3 つすべてがある場合は、以下に示すように、クラスを使用してカスタム プロキシを作成できます。System.ServiceModel.BasicHttpBindingSystem.ServiceModel.WSHttpBinding[ServiceContract]ChannelFactory<T>

public static void TalkToService(Binding binding, Uri endpointAddress) {
    // Assuming that the service contract interface is represented by ICalculator
    var factory = new ChannelFactory<ICalculator>(binding, new EndpointAddress(endpointAddress));
    ICalculator proxy = factory.CreateChannel();
    Console.WriteLine(proxy.Multiply(45, 56));
}
于 2012-10-30T03:06:54.180 に答える