簡體   English   中英

WCF REST服務和客戶端通知

[英]WCF REST service and client notifications

這是我的情況:我有一個Firebird數據庫,一個WCF REST服務(.NET 4.5)和一個Windows Mobile 6客戶端。 我需要的是:在Firebirds發布事件中,WCF REST應該通知客戶端。

我知道WCF用作SOAP服務時具有雙工通信,但是由於框架版本不兼容,我無法使用它。 有任何想法嗎? 這是否有可能,如果沒有其他選擇? 我通常對WCF還是陌生的,所以我可能會缺少一些東西,但是找不到適合我的特殊情況的東西。

附言:如果您需要我服務中的代碼段,請告訴我。 有很多東西,我正在努力使這篇文章盡可能整潔。

我將通過WCF使用ASP.NET Web API 2來開發Rest服務和SignalR

Web API將用於您的REST Web服務,當Firebird發布事件時,SignalR會通知您的所有客戶端。

SignalR允許服務器和客戶端之間的雙向通信。

樣本中心:

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

我找到了解決方案,但我不確定它有多好。 首先,我制作了用於“訂閱”事件的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。

PS您應該將InstanceContextMode設置為PerCall才能起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM