簡體   English   中英

wcf從具有雙工的不同線程返回客戶端的響應

[英]wcf return response to client from a different thread with out Duplex

在異步調用服務操作時:

proxy.OperationCompleted += new EventHandler<OperationEventArgs>(OperationCallback);
proxy.OperationAsync(OperationRequest request);

在服務器端:

 new Thread(new ThreadStart(RunOperations)).Start();

 public OperationResponse Operation(OperationRequest request)
 {
      Queue.Enqueue(request); 
 }

 // in some other thread  
 public OperationResponse RunOperations()
 {
     OperationRequest request = Queue.Dequeue();
     OperationResponse response = Execute(request);
     // here i need to some how return to response to the threw the channel 
     // which sent the request 
 } 

我的問題 :

有沒有辦法構建一個雙工通道並通過回調返回響應,引用提交通道並返回響應扔掉它?

WCF有自己的線程模型。 默認情況下,通過調用操作合同來同步處理操作 - 當對操作合同的調用結束時,調用本身也會結束,並且響應將返回給客戶端。 如果在操作調用中生成一個線程,則必須等待線程完成(阻止操作線程)以返回響應。 它可能導致吞吐量問題,因為您可以通過等待調用阻止線程池中的所有線程,並且沒有線程可以提供新請求。

另外,WCF提供了兩種額外的機制: 異步服務和雙工服務。 在異步服務中,從線程池到服務器獲得一個線程,執行一些異步I / O操作的初始請求。 當I / O執行開始時,操作的線程返回到線程池以提供其他請求。 完成I / O后,操作將從線程池分配給新線程,並調用end方法。 操作本身和WCF處理模型仍處理響應 - 您不能手動分叉線程並從不同的線程返回響應。 這可以極大地提高某種操作的吞吐量。

如果這些型號都不適合您的需求,您需要雙工服務,您可以隨時回電給客戶。

在所有情況下,您都必須處理與通道超時相關的一些問題。

暫無
暫無

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

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