通知主机更改

时间:2014-09-03 14:25:05

标签: c# javascript asp.net

我有一个ASP.NET应用程序和一个托管WebBrowser的C#应用​​程序。 ASP.NET应用程序通过C#应用程序运行。

我需要在单击按钮时通知C#应用程序。最好的方法可能是通过Javascript。这看起来并不复杂,因为我可以公开javascript window.external的函数,但我的C#应用​​程序看到的唯一URL是/Default.aspx。所有的javascript函数(window.external.myfunc(..))都必须来自这个页面。

有什么想法吗?我空白了。我还有点不确定如何从代码隐藏调用javascript函数。 ScriptManager.RegisterClientScriptBlock似乎被大量使用,但是可以在一个页面上多次调用它吗?

谢谢!

顺便说一句,对于C#客户端,我使用WebBrowser.ObjectForScripting到一个自定义对象,该对象将从Javscript获取这些window.external函数调用。这很有效。

1 个答案:

答案 0 :(得分:0)

ObjectForScriptingwindow.external的部分可以正常使用。

为了从ASP.NET代码调用js函数,您应该使用来自js的ajax调用。有两种方法:

1-创建一个Web服务并不断调用它以检查发生的任何事情(即轮询)。这是最简单的方法,可以轻松实现,例如使用jQuery

$.ajax(...);

然后从回调中调用您的window.external.func()到该ajax调用(当然,如果它返回了预期的值)。请注意,使用此方法时,您将始终有延迟,因为客户端应轮询服务器。

2-建立与服务器的连接并使其保持打开状态,然后在服务器准备就绪时从服务器发送数据。对于这个问题,您可以使用SignalR之类的东西。这将解决延迟问题,但会保持开放的连接,从而带来其他问题。

实际上,决定这两种方法的主要因素是你是否可以延迟。如果等待平均15秒不是问题,请使用第一种方法,轮询时间为30秒。如果您希望它是实时的,请使用第二种方法,但要谨慎处理自己的问题,如长时间运行的连接,SignalR中缺少会话状态等等。

我只想告诉你选择。如果不清楚,请告诉我。