4

これは、「どのように行われるか」という質問ではなく、「どのように行われるか」という質問です。さまざまなプラットフォーム上の複数の内部クライアントシステムで使用されるサービス(中間層、.net、データ抽象化といくつかのビジネスロジックの提供)の構築を検討しています。たとえば、あるクライアントはWebサイト、別のクライアントはJavaコード、別のクライアントはC#などです。

GetData、BeginGetData、EndGetDataメソッドなどの同期および非同期APIをサービスに提供したいと思います。また、クライアントがシステムに追加される新しい「データ」の通知に登録できるようにしたいと思います。過去に、通知用のTibcoEMSチャネルを備えたWebサービスを使用してこれを実装しました。

私の質問は次のとおりです。WCFサービスを公開することで、3つの要件(同期、非同期、およびpub / sub)を達成できますか?このサービスは、WCF以外のクライアントによって消費される可能性がありますか?

この質問のあいまいさを失礼します-私は必要に応じて詳しく説明することができます。

前もって感謝します。

4

2 に答える 2

3

メソッドはデフォルトで同期的です。それらを非同期にするには、この属性 [OperationContract(AsyncPattern=true)] を追加して、winforms で BeginIvoke() を実行する場合と同様に、IAsynchResult を返す必要があります。(詳細はこちらhttp://msdn.microsoft.com/en-us/library/ms734701.aspxを参照)

コールバック コントラクトと呼ばれるものを使用してパブリッシュ/サブスクライブを行うことができます (ただし、これを他のプラットフォームで実装するかどうかはわかりません)。これらの経験はあまりありませんが、それほど複雑ではないようです (詳細はhttp: //dotnetaddict.dotnetdevelopersjournal.com/wcf_alarmclock.htm )

于 2008-12-09T18:25:29.410 に答える
2

WCF サービスでの非同期操作の設定は、AsyncPattern=true を設定することによって Ninja が投稿したように行うことができます。または、正しいコマンド ライン引数を設定するか、"Generate svcutil の GUI バージョンの「非同期操作」オプション。非同期を生成すると、同期操作も生成されます。

クライアント非同期オプションの問題は、Java でコードを複製する必要があることです。Svcutil は、指定したとおりに VB または C# コードをエクスポートするため、C# コードを Java に変換する可能性は非常に高くなります。

Pub/Sub の場合、クライアント コールバックは操作方法です。私はそれらを使用していますが、非常にうまく機能します。ルート レベルでは、それらは .Net Remoting であり、イベント処理を使用してデータをクライアントに渡します (私の理解では)。これがクロスプラットフォームで使用できるかどうかは確認できませんが、いくつかの作業が必要です.

于 2008-12-10T15:47:33.957 に答える