2012-03-28 45 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,都是另一个问题。