簡體   English   中英

C# WCF NetTCPBinding阻塞應用

[英]C# WCF NetTCPBinding Blocking Application

我有一個基本的好友類型應用程序,它是 WCF 中的 pub/sub 交易。 我的問題是一兩個調用長時間運行,這阻塞了整個服務器應用程序(gui 更新等)。

這是我的代碼:

[ServiceContract(SessionMode = SessionMode.Required,
CallbackContract = typeof(IBuddyListContract))]
public interface IBuddyListPubSubContract
{
    [OperationContract]
    string GetABunchOfDataZipped(String sessionId); // this can take > 20 seconds

    ....
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, 
    ConcurrencyMode = ConcurrencyMode.Multiple)]
public class BuddyListPubSubContract : IBuddyListPubSubContract
{
    string GetABunchOfDataZipped(String sessionId)
    {
        // do some calculations and data retrival
        return  result;
    }
}

到目前為止,我對如何 go 有一個想法,但有沒有更簡單的方法?

想法 1 :讓 GetABunchOfDataZipped(String sessionId) 成為無效,當它完成時在我命中的雙工合同上有另一個端點。 我不喜歡這樣,因為如果我的架構發生了根本性的變化,如果字符串是通過慢速互聯網連接的一大塊文本,它仍然會遇到同樣的問題嗎?

我的問題是一兩個調用長時間運行,這阻塞了整個服務器應用程序(gui 更新等)。

您不清楚您在哪里看到阻塞行為,但聽起來它會在客戶端。 您應該從后台線程而不是 UI 線程調用 WCF 服務。 然后當您處理結果時,您將無法直接與您的 UI 元素交互,您將需要使用每個控件的Invoke方法。

暫無
暫無

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

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