使用Duplex WCF服务调用结果更新ASP.NET页

本文关键字:更新 ASP NET 结果 调用 Duplex WCF 服务 使用 | 更新日期: 2023-09-27 18:29:22

我在设计从ASP.NET应用程序调用双工WCF服务的最佳方法时遇到问题,我有以下情况:

1)我有一个带有一些操作的双工WCF服务
2)在ASP.NET web应用程序(它是我的客户端)中,我使默认页面实现回调接口,然后从双工服务中调用一个方法,将其自身作为回调的处理程序发送
3)当回调在default.aspx页面上返回时,我无法在页面上显示结果,因为整个HttpContext为空,因此我无法访问任何控件或应用程序[]或会话[]变量

这是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 ...
    }

有什么帮助吗?

使用Duplex WCF服务调用结果更新ASP.NET页

在服务器上处理页面时,您正在从ASP.Net页面调用WCF服务。

这个问题是页面在服务器上的时间很短,可能不到一秒钟。然后,在WCF服务做出响应之前,页面已返回到浏览器。

正如Lloyd提到的,解决这个问题的方法是使用AJAX从浏览器调用web服务。

有关如何执行此操作的示例,请参阅http://www.codeproject.com/Articles/128478/Consuming-WCF-REST-Services-Using-jQuery-AJAX-Call

您必须记住,您的应用程序由一个浏览器客户端组成,该客户端作为服务器访问ASP.NET应用程序,这两个客户端通过HTTP请求和响应进行通信。在WCF服务将消息发送回ASP.NET应用程序之前,您的ASP.NET应用程序很可能已将HTTP响应发送回浏览器。

我认为设拉子和劳埃德提出了一个很好的建议;如果可能的话,请尝试直接从浏览器调用WCF服务。这个答案表明,可以使用JavaScript与WCF服务执行双工通信。

但是,您不能这样做的原因可能有很多,例如凭据、网络防火墙规则,或者ASP.NET应用程序具有调用WCF服务所需的数据,也许您不想将这些数据公开给浏览器。

在这些情况下,可以选择实现复杂的解决方案,这些解决方案涉及在浏览器中使用JavaScript轮询ASP.NET服务器以获取更新。有几种方法可以做到这一点。有"短轮询"answers"长轮询"。还有一个相对较新的功能叫做WebSockets,但您的服务器和目标浏览器是否支持WebSockets是另一个问题。