C# MVC-使用 SignalR 从服务器发送消息给调用者
我使用SignalR-2.2.1从客户端到服务器的请求.该请求后,服务器将结果将结果发送回呼叫者. 这是我的JavaScript代码: $(document).ready(function () { var myHub = $.connection.signalHub; myHub.client.receive = function (tmp) { var obj = $.parseJSON(tmp); //do something }; $.connection.hub.start().done(function () { $('#xxxxx').click(function () { var form = $("form"); form.submit(); myHub.server.sendSomething();
6 2024-04-26
编程技术问答社区
信号和反应性组合
我发现了关于如何使Signalr和Rx播放的小宝石: RX和反应性教程 但是,由于您可能已经注意到这仅在从服务器 - > client时起作用.有人知道如何相反吗?我希望我的框架像nservicebus和更少的RPC一样是更多的"消息"(SignalR标准示例往往是). 原因是弱打字的世界对RPC并不是很好.在服务器端,我很想能够在客户端调用周围放置接口,但是我不能,因为客户端甚至可能都不是合同和接口的概念. 因此,我希望将所有内容转变为基于消息,而经纪人则通过反应性的SOA服务在中间.希望反应性和DTO将是我的代码中唯一的依赖项. 那么有人知道如何实现这一目标吗? 解决方案 很高兴您发现这篇文章很有价值.这只是如何推向浏览器客户端的一个示例,但是SignalR将与任何数量的终点合作,包括使用OWIN的Windows服务.实际上,SignalR的扩展解决方案已经与Azure Service Bus集成在一起,因此您的想法并不遥远.您可能需要检查 Cl
10 2024-04-24
编程技术问答社区
调用.fail(error)而不抛出异常
使用signalr,当通过轮毂方法返回特定值时,是否有可能调用.fail而不是.done? 也许使用信号管道? public bool Delete(int addressId) { // User should not be able to delete default address if(AddressService.IsDefaultAddressOfCustomer(addressId)) return false; // Should call .fail() on client AddressService.Delete(addressId); return true; // Should call .done() on client } 替代方案是抛出异常,但我想避免这种情况,因为错误不是服务器的故障,而是用户故障. 解决方案 假设您确实确信一个例外不是适合您的正确工具,您可以使用某些自定义属性定义
4 2024-04-23
编程技术问答社区
未调用函数上的 signalr
我正在使用Signalr客户端Java进行Android应用程序. 以下是我目前正在尝试的代码: conn = new HubConnection("http://example.com/"); hubProxy = conn.createHubProxy("android"); hubProxy.on("request", new SubscriptionHandler() { @Override public void run() { testFunction(); } }); conn.start().done(new Action() { @Override public void run(Void obj) throws Exception { hubProxy.invoke("init"); } }); 以下测试并验证为工作: 连接肯定已经开始,连接成功.我可以使用
50 2024-04-22
编程技术问答社区
如何从 React JS 客户端向 SignalR 中枢传递自定义标题?
我正在设置一个带有DOT Net Core 2.0的新Signalr React App("@aspnet/signalr").我想将自定义标头发送到Signalr Hub"协商"请求(例如request.headers [" myheader"] =" header"). 我能够连接到集线器并将数据恢复到React应用程序.我尝试通过尝试覆盖" withurl"的选项中的httpclient来设置自定义标头. 使用此处提供的代码,我会遇到错误:"错误:无法完成与服务器的协商:错误:从谈判不确定的未定义的意外状态代码" 从选项中删除httpclient时它连接. import { HubConnectionBuilder } from '@aspnet/signalr'; const options = { accessTokenFactory: () => { return "jwt token"; }, httpClient: {
20 2024-04-22
编程技术问答社区
如何使用 signalr 跨域发送信息
在我当前的项目中,我想构建消息传递系统,但在子域中.假设有buyer.xyz.com和seller.xyz.com,买方和卖方可以互相发送消息,并且没有用户角色,买方和卖方来自Dififfent Tables.当买家发送消息时,消息将插入消息表中,如果他当前在线,则应更新指定的卖方,反之亦然.我是Signalr的新手.如果可能的话,请给出代码示例. 解决方案 基本上,最佳入门方法是官方文档: http://http://wwwwwwwwwwwwwwwww . 您应该在项目中添加Microsoft.Owin.Cors库.然后,在您的启动类中,您修改了仅在以下内容中具有app.MapSignalR()的方法. (请注意,代码直接来自SignalR文档 - 您还可以指定将接受连接的域/子域). app.Map("/signalr", map => { // Setup the CORS middleware to run
18 2024-04-22
编程技术问答社区
信号 r 通知
我正在使用信号r创建一个应用程序来发送通知.我正在使用vs2012.在我的通知视图中,我在@model App.Models.Notification中添加了下面的代码. . @{ ViewBag.Title = "Index"; } @section Scripts { $(function () { var proxy = $.connection.notificationHub; alert(proxy)
2 2024-04-22
编程技术问答社区
SignalR 跨域连接--连接用户的连接 ID's
我在一个单独的域上托管了我的SignalR Hub,并通过我的主要应用程序与跨域连接到集线器.当用户登录到主应用程序时,建立了SignalR连接.现在,我遇到的问题是如何识别集线器中的连接用户. 如果我的集线器位于主应用程序中,那么我可以使用context.used登录用户的用户并维护字典并在连接和断开事件上更新它们. 但是作为跨域连接,我没有上下文.用户,我无法知道该连接ID属于谁.我在这里迷路了. 我在这里缺少什么? 解决方案 您应该自己保持用户的凭据和连接ID.您应该定义List或类似的东西.然后覆盖onConnected和onDisconnected方法.客户必须像Lars所说的那样发送Querystring以连接到您的枢纽. 例如,客户像这样发送给您 $.connection.hub.qs = { 'token' : 'id' }; 在集线器类中: public class ChatHub : Hu
18 2024-04-22
编程技术问答社区
SignalR 可以在没有网络浏览器客户端的情况下使用吗?
我正在研究一个项目,以同步前端进行异步过程,以使网络呼叫显示为同步,并正在探索使用Signalr将其全部绑在一起的使用. 我们托管了一个具有异步的WCF端点的服务,并且适用于大多数客户.他们向我们发送了数据,我们将其处理,在处理数据后,他们没有得到响应.我们的环境是多层的,并且设计为异步. 但是,有必要托管同步前端,在我们的服务上通过我们的环境完成数据后,我们的服务可以接收响应. 我们需要允许客户打开与我们的WCF服务的连接,传输数据并等待响应.这个想法是让WCF服务为客户端及其数据创建唯一的标识符,然后将这些数据移交给异步环境以进行处理.同时,WCF服务将打开与中央集线器的连接,并等待响应,以表明特定数据已完成处理.然后,集线器将响应具有状态的WCF服务,WCF服务将响应原始客户端. 我为此目的探索Signalr的主要原因是: 我喜欢Signalr使用的连接技术协议.它是轻量级的,可以根据各种条件使用几种不同的技术. 它可以很好地管理和区分客户端连接,从
8 2024-04-22
编程技术问答社区
我可以将循环缓冲区减小到 "1 "吗?这样好吗?
默认情况下,服务器上的环缓冲区中存储了1,000条消息. 对我来说,发送滞后客户1,000更新,而只是最新更新是没有意义的.在WCF中,我可以使用挥发性数据来做到这一点. 我想我可以通过将缓冲区减少到" 1"来模拟挥发性方法,但不确定是否可以按每个集线器进行配置,或者理想地以per方法为基础进行配置. 是否使用轮毂或与此使用持续连接有关? 解决方案 即使您设置此最小缓冲尺寸的主要目的是确保Signalr的长播种运输有些可靠.如果缓冲区的大小实际上是1,则通过长插曲连接的客户很可能会错过民意调查之间的消息. 我知道在某些应用程序中,最后一条消息很重要.不幸的是,截至目前,SignalR没有"挥发性"消息传递配置.将缓冲区的大小设置为32差不多.至少客户不应在缓冲尺寸的小尺寸的情况下落后太远. 您假设有多个缓冲区,但是不能单独配置缓冲区. SignalR每个"信号"创建一个环缓冲区. "信号"可以是连接ID,组名称,用户名,persistentConne
24 2024-04-22
编程技术问答社区
从后台业务层调用 SignalR 中枢
我有一个MVC网站坐在一些相当大的业务对象上.我的MVC控制器呼叫管理器对象,该对象进行并委派给其他一组对象. 基本上代码是深服务器端,而以某种方式的集线器就像一个控制器,因为它离客户端很近. 是否有一种方法可以根据传递给这些管理器对象的集线器的引用来执行SignalR方法? 解决方案 如果您的MVC和SignalR服务在相同的过程中运行,则可以调用globalhost.connectionmanager.gethubcontext(" myHub"); 它们在单独的过程中,然后您需要在MVC应用中创建一个SignalR客户端 其他解决方案 好吧,所有客户端都将连接到您的Web应用程序,并坚持那里的连接.从单独的后端程序中,您只需在Web应用程序中调用Web服务,该Web服务可以在Web项目中的同一SignalR Hub上发布消息.您的后端应用程序无法直接连接到SignalR Hub.这一切都流过一个点,是您的Web应用程序. 如果您只是在同一We
12 2024-04-22
编程技术问答社区
在通过网络访问的自托管 SignalR 服务器中实施授权
我正在寻找有关如何在自托管(非IIS)环境中运行的后端服务上实施SignalR的授权安全性的指南,该指南是从Web应用程序中调用的.后端应用程序基本上是一个监视器,它将Signalr事件发射回基于HTML的客户端.这一切都很好(实际上非​​常好). 但是,我们需要限制从网站身份验证的用户访问服务器的访问.因此,基本上,如果在网站上对用户进行了身份验证,我们需要以某种方式选择Crandentials(用户名已足够)和后端应用中的验证状态,以决定是否允许连接以避免未经授权的访问. . 任何人都可以指出有关如何完成这种验证转发的某些策略或模式吗? 解决方案 我在这里遇到类似的问题,就像我的Web应用程序一样,我使用一个简单的cookie身份验证系统,该系统使用AOP样式方法检查具有属性的任何控制器,然后将获得当前上下文(无论是从静态httpcontext.current或从目标调用对象取决于拦截器的类型),然后验证cookie的存在,它包含正确的数据,然后最终使用db或c
10 2024-04-22
编程技术问答社区
为什么在 ASP .Net MVC 应用程序中使用 SignalR 2.x 库时 HTTPContext.Current.Session 为空?
我正在尝试从使用Signal R1.X TGO Signalr 2.x的ASP.NET MVC应用程序迁移我们的ASP.NET MVC应用程序.我刚刚发现问题,这肯定会导致我们追求前进的问题. 我们的Web应用程序是基于MVC的,并大量使用httpcontext.current.sessess.session变量. 使用Signalr 1.x运行时,一切都很好,并且与会话一起使用. 当我们升级到Signalr 2.x时,会话突然为空. 我进行了一些谷歌搜索,并找到了有关此问题的以下链接: httpcontext.current.current.current.session.session.session. Signalr ...使用SignalR时需要替代会话状态 进一步的研究揭示了以下信息的小说: 概述/signalr-20/故障排除和删除/故障排除 HTTPContext.Current.Session is null This behavior is
12 2024-04-22
编程技术问答社区
浏览器多个标签页中的不同连接
为什么SignalR在浏览器中为同一登录用户建立不同的连接. 有什么方法可以为在同一浏览器中打开的所有选项卡建立一个连接. 从连接我的意思是signalr中用户的connectionID. 解决方案 因为同一浏览器的不同选项卡是不同的文档\" processes" - 在某种意义上,每个选项卡代表客户端应用的不同"实例".无法直接在它们之间共享JavaScript对象(这就是Signalr在每个选项卡中打开新连接的原因).要在不同实例之间共享数据\,您可以使用例如HTML5 LocalStorage机制 因此,如果要在选项卡之间共享一个信号连接,那么要走的方法就是通过仅在一个选项卡中管理连接并允许选项卡之间的通信,以便每个选项卡都能从服务器发送\接收消息.您可以使用或受到的启发 这还解决了问题浏览器最大连接的浏览器限制与单个服务器.
26 2024-04-22
编程技术问答社区
从 SignalR .NET 客户端连接工作集线器时出现 HttpClientException 异常
我有一个工作信号应用程序,该应用程序允许我连接多个JavaScript客户端并交换数据.当我尝试与.NET客户端连接时,我会收到以下错误: An exception of type 'Microsoft.AspNet.SignalR.Client.HttpClientException' occurred in mscorlib.dll but was not handled in user code Additional information: StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Transfer-Encoding: chunked X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcRGFycmVuXERlc2t0b3BcQ29uc29sZ
10 2024-04-22
编程技术问答社区
信号 R "协商请求过程中出错"
我的应用程序中有套接字通知,当我本地运行时运行良好,但是当我部署到VM时,它会抱怨发出以下消息. Error: Error during negotiation request. at Object.signalR._.error (jquery.signalR.js:178) at signalR.fn.signalR.start.onFailed (jquery.signalR.js:644) at Object.signalR.fn.signalR.start.connection._.negotiateRequest.signalR.transports._logic.ajax.error (jquery.signalR.js:664) at n.Callbacks.j (jquery.js:3094) at Object.n.Callbacks.k.fireWith [as rejectWith] (jquery.js:3206)
26 2024-04-22
编程技术问答社区
安装 signalR 后,signalR MVC 网站加载不确定
我创建了一个全新的MVC4应用程序.从Nuget安装了新的SignalR包: Install-Package Microsoft.AspNet.SignalR –pre 每当我运行它时,它都会无限期加载.我知道这是由signalr => app_start/registerhubs引起的,在安装过程中添加,因为它在调试中永远不会通过" RouteTable.Routes.MapHubs();"行. . 在运行Windows 7和VS2012和IIS Express 的几台机器上尝试了一下 什么给了?? 谢谢 UPDATE: 我只是在家用计算机上尝试过.创建了一个全新的MVC4应用程序,RAN Nuget软件包安装和它可以正常工作! :)(同一设置VS2012,Win7,IIS Express). 这很奇怪,因为我办公室的所有内容都很好,直到我安装了新版本的Signalr. 可以是,我们在工作中 ? - 为什么会有所作为? - 在工作中
14 2024-04-22
编程技术问答社区
为 @aspnet/signalr Javascript 客户端添加标头
我正在使用 @aspnet/signalr官方javaScript客户端,来自这个NPM软件包 我想知道是否可以将标头配置添加到客户端连接标头 我如何构建连接 let connection = new signalR.HubConnectionBuilder() .withUrl( "https://some.signalr-host.com" ) .build(); 解决方案 进行一些研究后进行更新 似乎Signalr js/ts客户端库不支持添加自定义标题 因此,我们的解决方案是通过查询字符串发送参数,并制作了服务器API 由于信号r url连接未显示在地址栏中,因此有点安全 ,例如 const connection = new HubConnectionBuilder() .withUrl( `${signalrUrl}&${key}=${value}`) .build(); 其他解
24 2024-04-22
编程技术问答社区
重新连接断开的 SignalR 客户端的最佳实践 (JS)
我想提高客户端客户端的客户端实现的弹性. 目前,我这样做: hub.server.sendClientNotification(string, appSettings.username()); 有时,由于服务器未响应或客户端的Internet连接变得无法使用,因此会引发与连接性相关的例外. 我想通过排队请求然后做类似的事情来解决这个问题: try { // pop from queue hub.server.sendClientNotification(string, appSettings.username()); // success - discard element } catch (e) { // requeue element } 使用这种实现,我需要在断开连接之间使用$.connection.hub.start重新定位我的信号连接,还是可以继续尝试在一个间隔内尝试hub传输? 这是我建议的: var
20 2024-04-22
编程技术问答社区
SignalR 如何决定使用哪种传输方式?
SignalR是用于实时连接的传输的抽象.仍然我想知道如何确切地决定应使用哪种传输方法,具体取决于各种因素. 我使用可用文档进行了一些研究,并研究了来源,并想到了一个想法. 所以我的实际问题是,以下流程图正确还是我缺少任何东西? 更新: 感谢您的输入!这是根据修复程序的更新版本.但是我仍然不确定一件事:如果没有明确检查是否使用IE9+,如果不是IE,则触发了从Foreverframe到LP的后备,并且不支持SSE? 解决方案 首先出色的图表. 非常接近!这是一些修复程序: Configured JSONP Yes -> Use LP No -> IsCrossDomain Yes -> CORS Support? No -> JSONP = true -> Use LP Yes -> Server Supports W
20 2024-04-22
编程技术问答社区