【问题标题】:Update an ASP.NET page with Duplex WCF Service Call Result使用双工 WCF 服务调用结果更新 ASP.NET 页面
【发布时间】:2012-04-12 09:42:07
【问题描述】:

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

1) 我有一个带有一些操作的双工 WCF 服务
2) 从 ASP.NET Web 应用程序(这是我的客户端)我将其设为默认值页面实现回调接口,然后从双工服务调用一个方法,将自身作为回调的处理程序发送
3)当回调在 default.aspx 页面上返回时,我无法显示页面上的结果,因为整个 HttpContext 为空,所以我无法访问任何控件或 Application[] 或 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 ...
    }

有什么帮助吗?

【问题讨论】:

  • 对于使用 WCf Duplex 服务,从客户的角度和架构上来说,这是一个有点糟糕的选择。如果您必须连接到单独的 WCF 服务来检索数据并且服务调用和响应之间存在延迟,那么您最好将服务调用交给后台任务,然后使用轻量级 AJAX 调用从客户端轮询以检查对于返回的数据。您的客户端将拥有响应式 UI,并且您的服务器不会浪费资源。
  • 你能不能给我一个例子,因为我无法得到它

标签: c# asp.net wcf


【解决方案1】:

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

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

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

在这些情况下,您可以选择实施复杂的解决方案,包括在浏览器中使用 JavaScript 轮询 ASP.NET 服务器以获取更新。有几种方法可以做到这一点。有“短轮询”和“长轮询”。还有一个比较新的特性叫做 WebSockets,但是你的服务器和你的目标浏览器是否支持 WebSockets 是另一个问题。

【讨论】:

    【解决方案2】:

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

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

    正如 Lloyd 所说,解决此问题的方法是使用 AJAX 从浏览器调用 Web 服务。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多