![](/img/trans.png)
[英]WCF Duplex callback method never executes when invoked from a different thread
[英]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.