2012-03-18 52 views
1

我正在使用Silverlight 5.0和WCF 4.0以及實體框架4.0。我的設計如下 - Silverlight客戶端通過普通的同步方法調用來調用服務代理(這只是對正在進行的WCF服務的封裝)。服務代理inturn調用WCF服務,該服務使用二進制編碼和httptransport進行自定義綁定。這個WCF服務在Silverlight的同一個應用程序中被提出,並且來自服務代理的調用正在通過「操作名稱」異步方法進行。服務代理具有自定義事件,當「操作」完成方法被調用時將被觸發。此服務代理事件將由silverlight處理。此WCF服務再次使用「操作名稱」異步方法調用分佈式WCF服務。Silverlight正在按順序執行而不是並行執行WCF調用

我的silverlight應用程序在屏幕上有四個不同的小部件,並且他們對服務代理進行了四次調用。來自服務代理的四個調用正在與正在處理的WCF服務並行觸發。但是從正在處理的WCF服務中,這些調用正在按順序進行到分佈式wcf服務。我剛剛與提琴手檢查,這表明在過程中,wcf正在連續調用分佈式wcf服務。我想同時做到這一點。有人可以請幫忙嗎?問題是我的服務器正在處理它們,而不是並行處理它們。我通過小提琴手證實了這一點,我發現這些電話是按順序到達WCF的。 WCF分佈式服務配置爲具有併發模式single和webhttpbinding的percall。

也有人有任何資源/鏈接瞭解silverlight/wcf線程模型如何工作。我有興趣知道proxymethodAsync調用是否產生新的線程?如果沒有阻止UI線程,它是如何工作的?

+0

需要查看保存更改的代碼。 – BentOnCoding 2012-03-18 05:00:10

回答

4

HTTP調用(我猜你的WCF調用正在進行)不是異步的。

您的代碼發出異步調用 - 但Silverlight運行時(或瀏覽器)爲您同步處理該連接。只有在返回後,纔會向您的代碼發出回調。

一次可以創建的連接數量也有限制 - 這是瀏覽器和/或運行時限制。通常限制是兩個活動連接。

所以,如果你需要打很多電話,你應該把這些打包起來,並把它們作爲一批發送到服務器。

+0

嗯..但問題是我的服務器正在處理它們ony一個,而不是在parellel中運行它們。 – 2012-03-18 17:14:30

+1

如果你使用像Fiddler這樣的工具(或Firefox中的Firebug),你會明白我的意思 - 瀏覽器一次只能向每個主機運行兩個連接。一旦瀏覽器收到響應,它會發送另一個請求。 – 2012-03-19 01:21:26