使用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 ...
}
有什么帮助吗?
在服务器上处理页面时,您正在从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是另一个问题。