Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实时服务器到客户端通信asp.net c#_C#_Asp.net_Web Applications_Webforms - Fatal编程技术网

实时服务器到客户端通信asp.net c#

实时服务器到客户端通信asp.net c#,c#,asp.net,web-applications,webforms,C#,Asp.net,Web Applications,Webforms,您好,我正在研究以下问题的一些解决方案。如有任何建议,将不胜感激 我有一个c#asp.net web表单应用程序中的应用程序。我需要能够在客户端之间进行实时更新,以下是场景: 客户端1正在更新第1页,比如说一个包含文本框和网格视图的页面。用户将在文本框中输入一些文本,提交时将其保存在SQL server db中并更新网格视图。同时,客户端2正在查看第1页,我需要让服务器在数据库更新时将更新推送到第二个客户端。我正在寻找一种不需要JavaScript的解决方案,它可以从服务器上推送并调用客户端2上

您好,我正在研究以下问题的一些解决方案。如有任何建议,将不胜感激

我有一个c#asp.net web表单应用程序中的应用程序。我需要能够在客户端之间进行实时更新,以下是场景:

客户端1正在更新第1页,比如说一个包含文本框和网格视图的页面。用户将在文本框中输入一些文本,提交时将其保存在SQL server db中并更新网格视图。同时,客户端2正在查看第1页,我需要让服务器在数据库更新时将更新推送到第二个客户端。我正在寻找一种不需要JavaScript的解决方案,它可以从服务器上推送并调用客户端2上c#中的代码隐藏函数

性能是一个值得关注的问题,因为SQL服务器上可能存在高使用率和高级别的用户。因此,我不希望轮询每个客户机的db

谢谢你的帮助。任何建议都很好

更新:以下是我目前的解决方案:

html

$(函数(){
var updater=$.connection.updateHub;
//创建广播功能
updater.client.broadcastMessage=函数(){
__doPostBack(“upNotes”,“upNotes”);
};
//启动到集线器的连接
$.connection.hub.start().done(函数()){
$()。单击(函数(){
updater.server.send();
});
});
});
等等


OnLoad在C#中调用一个codebhind函数,该函数检查数据库的更改,然后重新绑定网格

如果Javascript没有保持一个开放的套接字,就无法将更改实际推回到客户端,尽管对网页的连续轮询至少会刷新。使用Javascript,您可以进行持久的AJAX调用(请使用超时和错误处理),并在调用最终成功时更新网页

不过,该网站不必在每次轮询时都访问数据库

如果您不想在每次轮询页面时都涉及数据库,您可以通过不同的方法发出挂起更改的信号,或者让数据库更新一些可以在不“点击数据库”的情况下进行检查的内容

例如,如果所有内容都在同一个web服务器上运行,则只要在将数据库更新到共享内存的同时编写一个时间戳,然后在轮询网页时检查该共享内存,并在更新时间戳时从数据库重新加载。我并不推荐这种方法本身,只是举一个简单的例子


我鼓励您放弃关于“无javascript”的规则,如果您的实时页面对客户来说是有价值的,他们可以将您的服务列入白名单以允许使用javascript。不断地轮询整个网页比屁股上的疙瘩更难看。

如果我能使用JavaScript,你有一些我应该使用的特定方法或库吗?使用AJAX方法有什么问题吗?JQuery使这变得简单而健壮,因为您可以很好地指定超时、错误处理或正常的成功逻辑。这几乎就像他们为这种情况设计了AJAX。我对AJAX不太熟悉。我会检查它。你能在同一页上调用方法说重新加载网格并绑定结果吗?好的,我用singlr和update面板处理我的原型,以部分回发我需要更新的网格。啊,你在使用MS AJAX的东西,它们工作正常,但确实有更好的方法。当您有更多的时间时,请直接看一下使用jQuery和AJax——先看一些关于jQuery的教程,然后再看一些关于jQuery和AJax的教程,您将看到一种更好的方法。通过这种方式,互联网流量也要小得多,您不会仅仅为了进行函数调用而发回who页面。
       $(function() {
                var updater = $.connection.updateHub;
                //Create broadcast function
                updater.client.broadcastMessage = function () {

                    __doPostBack("upNotes", "");

                };

                //Start the connection to the hub
                $.connection.hub.start().done(function() {
                    $(<%= btnNotesSubmit.ClientID %>).click(function () {
                        updater.server.send();
                    });
                });
            });

<asp:UpdatePanel ID="upNotes" runat="server" UpdateMode="Conditional" OnLoad="ReloadNotes">
   <ContentTemplate>
       <asp:GridView ID="gvNotes" runat="server">