![](/img/trans.png)
[英]Call a callback method on WCF server wihout waiting client must finish
[英]WCF Server-to-Client callback method with return value
我嘗試了不同的問題,檢查我的個人資料中的其他兩個問題,解釋了我對這種情況采取的方法遇到的困難。 我會在這里跳過它們。
我只需要一個服務器回調客戶端(通過nettcp通道)的示例(C#首選),客戶端計算答案,然后返回結果。
(IsOneWay = true)
解決方案不感興趣,除非我很清楚我對它的含義及其后果非常困惑。 謝謝!
在CodeProject上查看這篇文章 。 這描述了回調的基本示例。 你可能不得不改變幾件事:
在回調合同上,操作標記為一種方式 - 這是為了避免由於客戶端不良而阻塞服務器(建議的做法)。 但是如果你必須阻止服務器,那么你需要刪除一種方法。 請注意,如果您要逐個回調多個客戶端,那么您可能必須在不同的線程上回調每個客戶端,否則第一個客戶端將阻止回調到下一個客戶端。
何時調用回調實際上是一個服務器實現。 每當客戶端加入(或訂閱您的需求)時,給定的示例都會維護一個客戶端回調通道列表。 現在,此列表可用於以您想要的任何方式調用回調。 因此,您可以通過簡單地遍歷列表來調用計時器上的回調。 請注意,您必須確保對列表的線程安全訪問。
如果客戶端必須在回調中返回一些結果,則不能再使用OneWay。
如前所述,訂閱僅意味着添加到列表(示例中為加入方),取消訂閱意味着從列表中刪除(離開方)。
編輯 :
我從看到的示例中獲取了源代碼,並將其修改如下:
在回調契約中添加了一個方法Echo
:
public interface IBeerInventoryCallback
{
...
[OperationContract]
string Echo(string message);
}
當某人離開聚會並在控制台上打印來自客戶端的響應時,從服務中調用Echo。 它沒有任何問題。
請注意,此示例使用VS生成的客戶端代理,該代理繼承自System.ServiceModel.DuplexClientBase<T>
,這使客戶端代碼更加簡單。 也許,你應該嘗試一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.