2012-03-28 74 views
0

我有一個問題,設計出最佳的方式從ASP.NET應用程序調用WCF雙工服務我有以下情形:更新結果與雙工WCF服務調用的ASP.NET頁面

1)我有一個具有一些操作的雙工WCF服務
2)從ASP.NET Web應用程序(這是我的客戶端),我使默認頁面實現回調接口,然後調用雙工服務發送自身的方法作爲回調處理器
3)當回調返回時在default.aspx頁面我不能在頁面上顯示的結果,因爲整個HttpContext爲空,所以我不能訪問任何控制或應用程序[]或Session []變量

這裏是在Default.aspx的

代碼
[CallbackBehavior(UseSynchronizationContext = false)] 
public partial class _Default : System.Web.UI.Page, VehicleTrackingService.IDuplexServiceCallback 
{ 
    public _Default() 
    { 

    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     ThreadPool.QueueUserWorkItem(new WaitCallback(delegate 
     { 
      try 
      { 

       DuplexService client = new DuplexServiceClient(new InstanceContext(new_Default())); 
       switch (DropDownList1.SelectedItem.Value) 
       { 
        case "0": 
         { 
          client.Method1(int.Parse(txt_name.Text)); 
          break; 
         } 
        case "1": 
         { 
          lbl_res.Text = "Not Provided yet."; 
          break; 
         } 
        default: 
         { 
          lbl_res.Text = "Not Provided yet."; 
          break; 
         } 
       } 
      } 
      catch(Exception ex) 
      { 
      } 
     })); 
    } 

    public void DuplexCallbackFunction(string response) 
    { 
     // Wanna to show result (the response) from here ... 
    } 

任何幫助請嗎?

+0

從客戶角度和架構上來說,這對於使用WCf Duplex服務來說是一個有點差的選擇。如果您必須連接到單獨的WCF服務才能檢索數據,並且服務調用和響應之間存在延遲,那麼最好將服務調用關閉到後臺任務,然後使用輕量級AJAX調用從客戶端輪詢以檢查爲返回的數據。您的客戶端將具有響應式用戶界面,並且您的服務器不會浪費資源。 – Lloyd 2012-03-28 18:59:27

+0

你能給我舉個例子,因爲我無法得到它 – DigitalFox 2012-03-28 19:14:40

回答

0

你要記住,你的應用程序由正訪問ASP.NET應用程序服務器的瀏覽器客戶端,並通過HTTP這兩種溝通請求和答覆。在WCF服務將消息發送回ASP.NET應用程序之前,ASP.NET應用程序很可能已經將HTTP響應發送回瀏覽器。

我認爲設拉子和勞埃德提出了一個很好的建議;如果可能的話,嘗試直接從瀏覽器調用WCF服務。 This answer表明可以使用JavaScript與WCF服務執行雙向通信。

但是,可能有很多原因導致您無法做到這一點,例如憑據,網絡防火牆規則,或者僅僅是ASP.NET應用程序具有必要的數據來調用WCF服務,也許你不想將這些數據公開給瀏覽器。

在這些情況下,您可以選擇來實現複雜的解決方案,這些解決方案涉及在瀏覽器中使用JavaScript來輪詢ASP.NET服務器的更新。有幾種方法可以做到這一點。有「短期投票」和「長期投票」。還有一個稱爲WebSockets的相對較新的功能,但是無論您的服務器和目標瀏覽器是否支持WebSockets,都是另一個問題。