2016-10-11 20 views
0

私の状況は次のとおりです。Firebirdデータベース、WCF RESTサービス(.NET 4.5)、Windows Mobile 6クライアントがあります。私が必要とするのは、Firebirds postイベントでは、WCF RESTがクライアントに通知する必要があります。WCF RESTサービスとクライアント通知

私は、WCFがSOAPサービスとして使用されると二重通信を持っていることを知っていますが、フレームワークのバージョンの非互換性のために使用できません。何か案は?これは可能なのでしょうか?私は一般的にWCFの新機能なので、何かが不足している可能性がありますが、私の状況に役立つものは何も見つかりませんでした。

P.S私のサービスのコードスニペットが必要な場合は、教えてください。それがたくさんあり、私はこの投稿をできるだけきれいに保つよう努めています。

答えて

0

私はSignalRのレストサービスを開発するためにWCFよりASP.NET Web API 2を使用します。

ウェブAPIは、Firebirdがイベントをポストするときに、すべてのクライアントに通知するためのREST WebサービスとSignalR用です。

SignalRは、サーバーとクライアント間の双方向通信を可能にします。

サンプルハブ:

public class SomeHub: Hub 
{ 
    public void Send(string name, string message) 
    { 
     Clients.All.broadcastMessage(name, message); 
    } 
} 
+0

SingalRのクライアントはWindows .net CEでサポートされていないため、これは私にとってはうまくいかないでしょうが、将来のプロジェクトではまだ役に立つ提案です。 – Aleksandar

0

私は解決策を見つけたが、私はそれがどのように良い完全にはよく分かりません。 まず私はpost_eventが起こるまで、サービスインスタンスを凍結するAutoResetEventを使用してい

インタフェース宣言

[OperationContract] 
[WebInvoke(Method = "GET", 
BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "Notification")] 
Stream Notification(); 

サービスクラスの実装

public Stream Notification() 
{ 
     string result= ""; 
     using (FbConnection conn= new FbConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString)) 
     { 
      conn.Open(); 
      FbRemoteEvent events= new FbRemoteEvent(conn, "event1", "event2", "event3", "event4"); 
      events.QueueEvents(); 
      AutoResetEvent waitHandle = new AutoResetEvent(false); 
      eventi.RemoteEventCounts += (sender, args) => 
      { 
       if (args.Counts > 0) 
       { 
        result= args.Name; 
        waitHandle.Set(); 
       } 
      }; 
      waitHandle.WaitOne(); 
     } 

     return new MemoryStream(Encoding.UTF8.GetBytes(result)); 
} 

イベントに「購読」するために使用されるWCFの方法を作りましたそれが起こると、AutoResetEventのSet()メソッドが呼び出されてサービスのフリーズ解除が行われ、私のケースのイベント名で返されます。したがって、どのイベントがトリガされたのかわかります。 クライアント側では、別のスレッドでこのメソッドを呼び出してその応答を待っていれば、それに応じて処理し、同じメソッド要求を再送して次のpost_eventをキャッチできます。

P.S.これを機能させるには、InstanceContextModeをPerCallに設定する必要があります。

関連する問題