WCFは、実施(9)は、コールバックオペレーションWCFのを

I.はじめに

  セッションのWCFのサポートは、以前の記事で紹介した、この記事ではサポートされているオペレーティング詳細にWCFを説明します。WCFでは、古典的なサポート要求/応答モデルに加えて、一方向動作、操作のコールバック双方向モードのサポートを提供し、フロー動作をサポートするだけです。次は、これらのタイプの操作の下で詳細に説明すると、双方向例コールバック動作を達成します。

 

二、WCF動作の詳細

2.1要求 - 応答操作

   WCF要求応答モードは、デフォルトの動作モードです。要求応答モードを指す:応答メッセージを受信するまで、クライアントがフォームで要求メッセージを送信し、クライアントをブロックします。時間をかけてこのサービスがまだ応答しない場合、デフォルトの応答タイムアウトは、1分で、クライアントはTimeOutException例外が発生します。応答操作 - NetPeerTcpBindingとNetMsmqBinding WCFバインディングに加えて、すべてのバインディングは、要求をサポートしています。

2.2一方向の操作

   片方向操作は戻り値ではありません、クライアントは呼び出しが成功したかどうか気にしません。これは一方向の操作を意味します。クライアントが呼び出し要求を行うたら、WCFは、サーバーに要求メッセージを生成しますが、クライアントは、関連する応答メッセージを受信する必要がありません。そのため、一方向の操作は、戻り値を持つことができない、そしてサーバーはクライアントに渡された任意の例外をスローしません。そのクライアントがサーバの例外が発生したキャプチャする必要がある場合は、動作時間はtrueにIsOneWayプロパティセットを縮小することができない、このプロパティのデフォルトはfalseです。例外処理リファレンス:WCFでどのように例外処理。非同期操作の一方向の操作と等価ではありませんが、操作が発行された瞬間の単方向のブロッキングは、クライアントを呼び出しますが、一方向の呼び出しが複数発行した場合、WCFは、サーバー要求キューに呼び出して、一度に実行されます。ストレージ・キューの数が限られ、一度キューの容量を超えて送信されたコールの数、現象の遮断が発生し、起動要求を置くことができないのRu Dinglieこの時、別の要求が処理されるまで、すなわち、キュー要求キューの後、呼び出しはキューにブロックされ、そしてクライアントのブロック解除されます。WCFバインディングは、すべての一方向の操作でサポートされています。WCFはIsOneWayをtrueに一方向のプロパティセットを達成するために必要です。ポイントは、ここで注意する:それは結果が返さ含めることができないように一方向の操作は、何の応答メッセージはありません。

2.3コールバック操作

   WCFサポートサービスは、クライアントにリターンを呼び出します。コールバックサービス時にはクライアントであり、クライアントはサービスとなっています。WCFではなく、すべてのバインディングが唯一のコールバックできるようにするための双方向結合能と、コールバック操作をサポート。たとえば、HTTP接続は基本的に独立しているので、それはコールバックのために使用することはできませんので、我々は、コールバックベースbasicHttpBindingとwsHttpBindingバインディングを使用することはできませんTCPおよびIPCプロトコルは双方向サポートしているため、WCFは、NetTcpBindingとNetNamedPipeBindingのためのコールバックをサポートしています通信。サービス、およびクライアントへのサービスのために他の呼び出しを呼び出すためのクライアントのために1:HTTPサポートコールバックを行うために、WCFはWsDualHttpBindingバインディング提供し、それが実際には2つのチャネルのHttpを設定されています。

  コールバック契約によって達成コールバック操作の一部は、契約はサービス契約は、コールバック契約まで含めることができ、コールバックサービス契約に属します。あなたは、コールバック契約を定義したら、クライアントは、コールバックコントラクトを実装する必要があります。WCFでは、プロパティのCallbackContractのServiceContractによってコールバック契約を定義することができます。特定の実装コードを以下に示します。

// ICallbackとしてコールバックコントラクト指定
〔のServiceContract(ネームスペース= "http://cnblog.com/zhili/"、CallbackContract = typeof演算(ICallback))]
パブリックインターフェイスICalculator
{
[OperationContract(trueに= IsOneWay)]
ボイド複数(ダブルを、ダブルB);
}

//コールバック契約が定義され、場合には、アプリケーションのコールバック契約ないServiceContractAttribute特性
パブリックインターフェースICallback
{
[OperationContract(TRUE)へ= IsOneWay]
ボイドDisplayResult(ダブルX、Yダブル、ダブル結果);
}

  上記のコードでは、コールバック契約は限りタイプは、それに代わって、コールバック契約のように定義された通りのServiceContractの性質を持っているため、コールバックインタフェースのすべてのラベリングOperationContract特性の方法の必要性が残っている、のServiceContract属性にはありません。

操作の流れ2.4

  デフォルトでは、クライアントとサーバーの交換メッセージは、これらのメッセージは、受信側のバッファに置かれたときに、完全なメッセージを受信すると、それはすぐに処理が渡されます。クライアントがサービスにメッセージを送信したり、サービスがクライアントにメッセージを返すかどうか、それは本当です。クライアントは、呼び出しがリターン・メッセージが完全に受信されたクライアントの結果が含まれている場合に限り、完全なメッセージが受信されると、サービスが呼び出されます、サービスを呼び出すと、クライアントのブロックと接触することになります。各場合ショートメッセージ受信時間が、大きなファイルを含む、例えば、しかし、一度大きなデータメッセージの量、又はマルチメディアコンテンツを消費するため、小さなデータ・メッセージのために、この交換モデルは、単純なプログラミング・モデルを提供しますメッセージを受信した後、完全にブロック解除されるまで待たなければなりません、それは非現実的だろう。このような問題を解決するために、WCFは、メッセージデータ端末の起動処理を同時にチャネルを介して受信されたメッセージを受信することができ、そのようなプロセスは、ストリーミング・モデルと呼ばれています。大きな負荷を有するメッセージに対して、動作の流れは、スループットと応答速度を向上させるために、送信または受信端側がブロックされていないかどうかを、受信したメッセージ、および同時に、なぜなら。

 

第三に、WCFでのコールバック操作を達成するために

   上記は、WCFのサポートの4つの操作、WCFコールバック操作での実装では、以下の具体的な外観を説明します。この例の基本的な原理は次のとおりです。クライアントは、クライアントコンテキストインスタンスのクライアント操作によって呼び出されたサービスの運用、サービス操作を呼び出します。または、次の3つの手順に従ってWCFプログラムを実現しています。

  最初のステップ:同じことが実現WCFサービス契約と契約を達成することです。特定の実装コードを以下に示します。

1 //コールバックコントラクトICallback指定されている
2〔のServiceContract(ネームスペース= "http://cnblog.com/zhili/"、CallbackContract = typeof演算(ICallback))]
。3 ICalculatorパブリックインターフェース
。4 {
5 [OperationContract(= IsOneWay真の)]
複数の空隙6(ダブル、ダブルB);
7}
8。
9 @コールバック契約を定義する場合にないアプリケーションのコールバック契約ServiceContractAttribute特性
10パブリックインターフェイスICallback
11 {
12れる[OperationContract(trueに= IsOneWay)]
13は空隙DisplayResult(ありますXダブル、ダブルY、ダブル結果);
} 14件の
15
実装サービス契約// 16
17 CalculatorServiceパブリッククラス:ICalculator。
18は{
19人の#region ICalculatorメンバー。
20公共ボイド複数(ダブル、ダブルB)が
21です{
二重結果A * = 22 Bであり、
23は通路によってクライアント//例である
24 ICallbackコールバックOperationContext.Current.GetCallbackChannel = <ICallback>();
25
26 //クライアントのコールバックオペレーションで
27 callback.DisplayResult(A、B、結果);
28}
29 #endregion
30}

  第二段階:サービスホストを実装します。ここでは、サービスのホストとしてコンソールプログラムインチ 特定の実装コードを以下に示します。

1クラスプログラム
2 {
3静的な無効メイン(文字列[] args)
4 {
(のServiceHostホストが=新規のServiceHost(typeof演算(CalculatorService)))を用いて5
6 {
7 host.Opened + =デリゲート
8 {
9 Console.WriteLineを( "サービス)「......今始めます。
10}。
11
12 host.Open()。
13 Console.Read()。
14}
15}
16}

  次のようにコンテンツに対応した設定ファイルをホスト:

<設定>
<system.serviceModel>
<行動>
<serviceBehaviors>
<行動>
<serviceMetadata httpGetEnabled = "true"をhttpGetUrl = "にhttp:// localhost:8080 /メタデータ" />
</行動>
</ serviceBehaviors>
</行動>
<サービス>
<サービス名= "WCFContractAndService.CalculatorService">
<エンドポイントアドレス= "net.tcp:// localhostを:9003 / CalculatorService" = "結合netTcpBinding "契約=" WCFContractAndService.ICalculator" />
</サービス>
< /サービス>
</system.serviceModel>
</ configuration>の

 

  第三段階:クライアントの実装。クライアントコールバック操作にサーバーそのため、この場合には、クライアントがコールバックコントラクトを実装する必要がありそう。まず、管理者権限が成功開始後にサービスホストのホストサービスを開始すると、クライアントは、サービス参照を追加することにより、クライアントプロキシクラスを生成し、あなたがサービスアドレスを追加するための入力画面を参照する必要があり、その場合にします。http:// localhost:8080 /メタデータ。あなたはレファレンスサービスの成功を追加した後、次のように、クライアント上のコールバック契約、特定の実装コードを達成:

//クライアント1実施コールバック契約
2 CallbackWCFServiceパブリッククラス:ICalculatorCallback
。3 {
4 DisplayResult公共ボイド(ダブルA、Bダブル、ダブル結果)。
5 {
6 Console.WriteLineを(「{0} * {1} = {。 } 2」、A、B、結果);
7}
。8}

  次のステップは、クライアントコードを達成するために、コールバックの操作をテストすることです。具体的な実施手順:コールバックは、クライアントエージェントをインスタンス化するクライアント・プロキシ・パラメータとして、例としてオペレーティング・コンテキスト、最終的なコンテキスト・インスタンスのクラスのインスタンスをインスタンス化します。特定の実装コードを以下に示します。

1 //クライアントの実装、テストコールバック操作
2プログラムクラス
3 {
4静的な無効メイン(文字列[] args)
5 {
6 InstanceContext instanceContex新しい新しいInstanceContext =(新しい新しいCallbackWCFService());
7 =新しい新しいプロキシCalculatorClient CalculatorClient(instanceContex)。
proxy.Multiple 8(2,3);。
。9
10 Console.Read();
11}
12}れます

 

  次の実行プログラムは、サービスホストプログラムを起動し、コールバックが成功した場合は、次の図に示すような結果が表示され、クライアントプログラムを起動する最初の管理者権限で、コールバックの下で成功するかどうかを検出するためのプログラムを実行します。

  ここでは行かない、コールバック操作の実装を実証し、ここで達成ストリーム操作、上で実現することであるので、特定のニーズが行きたときに、それを勉強

 

IVの概要

  ここでは、コンテンツWCF操作の共有に終わった、本論文では4つの操作がWCFでサポート紹介:要求 - 応答操作、片方向操作、コールバックとストリーミング操作は、デフォルトのオペレーティングWCFを要求 - 応答操作を、最後に、コールバック操作の実現の一例。

 

転送します。https://www.cnblogs.com/zhili/p/MSMQ.html、著者:ハード学びます。

侵害した場合、削除するために私に連絡してください!

おすすめ

転載: blog.csdn.net/IT_0802/article/details/91502476