我找到了解決辦法,但我不完全知道它有多好。 首先,我所做的是用來「訂閱」事件
接口聲明WCF方法
[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));
}
我使用的AutoResetEvent直到post_event發生凍結服務實例並且一旦發生AutoResetEvent的Set()方法被調用來解凍服務並返回我的事件事件名稱,所以我知道觸發了哪個事件。 在客戶端,我在單獨的線程中調用此方法,並等待它的響應,一旦我得到它,我相應地處理它,並再次發送相同的方法請求,以便我可以捕獲下一個post_event。
P.S.您應該將您的InstanceContextMode設置爲PerCall以使其工作。
這不適用於我,因爲SingalR的客戶端不支持windows .net CE,儘管對於未來的項目仍然有用。 – Aleksandar