将更改通知主机

Notify host of changes

本文关键字:主机 通知      更新时间:2023-09-26

我有一个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函数。这是有效的。

带有ObjectForScriptingwindow.external的零件可以正常工作。

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

1-创建一个web服务并不断调用它来检查是否发生了任何事情(即轮询)。这是最简单的方法,可以很容易地实现,例如使用jQuery:

$.ajax(...);

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

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

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

我只是想让你看看选择。如果有任何不清楚的地方,请告诉我。