私は解決策を見つけたが、私はそれがどのように良い完全にはよく分かりません。 まず私は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に設定する必要があります。
SingalRのクライアントはWindows .net CEでサポートされていないため、これは私にとってはうまくいかないでしょうが、将来のプロジェクトではまだ役に立つ提案です。 – Aleksandar