- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
问题不是 this 的重复问题,虽然提到的问题有一些非常有趣的答案并帮助我更好地理解我的问题,但它不能满足我的需要。让我解释一下我的情况。
我有一个 asp.net mvc 网站,具有通知功能和通过 signalR 和 SQL 依赖项进行实时数据更新。用户身份验证是使用 Identity 2.0 完成的。仅允许授权用户查看更新的数据/通知。此外,通知/更新因用户而异。我通过实现自定义 UserId 提供程序并使用 Identity 的 UserId 实现了这一点。
现在我想实现以下目标。
简单部分:在其他网站上显示页面(仪表板)的内容,无论其开发语言如何。它可以注入(inject)现有页面或他们(其他网站)想要的任何地方。
困难部分:根据登录用户显示集成部分的实时通知和更新。
在这种情况下执行的最佳操作过程是什么?
更新由于原始问题因未指定详细信息而被搁置,因此这里是我希望获得建议的详细信息。
我有一个运行在localhost:54603的asp.net mvc网站,下面是home controller的 Action
public ActionResult Index()
{
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
return View();
}
索引 View 有一些 signalR 功能。下面是允许 CORS 的 signalR 的启动配置,因为我的目标是向客户端公开索引页面及其全部功能(运行 php 等)
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
// You can enable JSONP by uncommenting line below.
// JSONP requests are insecure but some older browsers (and some
// versions of IE) require JSONP to work cross domain
// EnableJSONP = true
};
map.RunSignalR(hubConfiguration);
});
我已经创建了 notifcationHub,下面是我在前端的代码(使用代理)。
<script>
$(function () {
// Reference the auto-generated proxy for the hub.
$.connection.notificationHub.url = 'http://localhost:54603/signalr';
var notification = $.connection.notificationHub;
// Client side method for receiving the list of notifications on the connected event from the server
notification.client.refreshNotification = function (data) {
$("#notificationTab").empty();
$("#cntNotifications").text(data.length);
for (var i = 0; i < data.length; i++) {
$("#notificationTab").append("<tr> <td> " + data[i].Id + "</td> <td>" + data[i].Text + "</td> <td>" + data[i].CreatedDate + "</td></tr>");
}
}
//Client side method which will be invoked from the Global.asax.cs file.
notification.client.addLatestNotification = function (data) {
$("#cntNotifications").text($("#cntNotifications").text() + 1);
$("#notificationTab").append("<tr> <td> " + data.Id + "</td> <td>" + data.Text + "</td> <td>" + data.CreatedDate + "</td></tr>");
}
// Start the connection.
$.connection.hub.start().done(function () {
//When the send button is clicked get the text and user name and send it to server.
$("#btnSend").click(function () {
notification.server.sendNotification($("#text").val(), $("#userName").val());
});
console.log($.connection.hub.id);
}).fail(function (data) { console.log('Could not connect' + data); });
});
</script>
Html 紧随其后
@{
ViewBag.Title = "Home Page";
Layout = null;
}
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/signalr/jquery.signalr-2.2.0.min.js"></script>
<script src="@Url.Content("~/signalr/hubs")"></script>
@*<script src="~/signalr/hubs"></script>*@
<div style="width: 70%; padding: 20px">
<div class="panel panel-primary">
<div class="panel-heading">
<! – To show notification count-->
<div style="float: left" class="panel-title">Notifications</div>
<div style="float: right" class="badge" id="cntNotifications"></div>
<div style="clear: both"></div>
</div>
<div class="panel-body">
<! – To show All the notifications-->
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>#</th>
<th>Text</th>
<th>Created Date</th>
</tr>
</thead>
<tbody id="notificationTab"></tbody>
</table>
</div>
</div>
<! – Add panel notification to send notification, Make sure that user enters the user id of the domain they are logged into -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Create Notifications</h3>
</div>
<div class="panel-body">
<div class="form-group">
<label class="control-label" for="focusedInput">Notification Text</label>
<input class="form-control" id="text" type="text" value="">
</div>
<div class="form-group">
<label class="control-label" for="focusedInput">Send To</label>
<input class="form-control" id="userName" type="text" value="">
</div>
<a id="btnSend" style="cursor: pointer" class="btn btn-primary">Send Notification</a>
</div>
</div>
</div>
现在我创建了另一个 html 页面,下面是它的代码
<html>
<head>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/signalr/jquery.signalr-2.2.0.min.js"></script>
</head>
<body>
<aside>
<div class="col-lg-2">
<ul>
<li>this</li>
<li>is</li>
<li>aside</li>
</ul>
</div>
</aside>
<article>
<div class="col-lg-10">
<div id="something">
</div>
</div>
</article>
<script src="http://localhost:54603/signalr/hubs"></script>
<script>
$(document).ready(function () {
$.ajax({
url: "http://localhost:54603/Home/Index",
dataType: 'html',
crossDomain: true,
cache:true
}).done(function (data) {
$('#something').html(data);
});
});
</script>
</body>
</html>
Ajax 请求返回 html 但 signalR 抛出错误。以下是控制台消息。
GET http://localhost:54603/Home/Index 200 OK 1.18s
Could not connect Error: Error during negotiation request.
我做错了什么导致了这个错误?
最佳答案
很难准确确定您需要做什么,因为这个问题相当广泛,但我希望这些要点对您有所帮助:
SignalR cross-domain在客户端使用 JavaScript,在服务器端使用 CORS,因此您在这方面有所了解。您可以轻松创建一个可以连接到 SignalR channel 的 JavaScript 文件,除了在客户端页面中包含 JavaScript 之外,无需对 PHP 代码进行任何更改。
您可以很容易地在您的服务器上创建一个脚本,客户端可以在他们的页面上引用该脚本,将所需的一切拉到客户端的页面上。因为脚本是从您自己的服务器执行的,所以我认为您不必担心 CORS,因为它不是真正的“跨站点脚本”,因为执行请求的代码将由您的服务器/域“拥有”。
至于身份验证,如果只有您的脚本需要访问身份验证,我认为这意味着您也可以使用您的域的身份验证(cookie 等),不过我必须检查那个。最终,您会使用从包含的脚本向您的域发出 HTTP 请求来验证它们吗?
这里有一些有用的线索,可能有助于解决这个问题:
关于php - 如何将包含signalR的asp.net mvc页面与其他平台集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33102704/
我想知道如何存储在调用时可以触发到连接的客户端的变量服务器端? 我使用并发字典来跟踪连接 GUID 并想知道我是否可以在服务器上存储字符串或其他数据类型,例如最后 10 条消息,因此当出现新连接时,客
无法让 SignalR 在我的机器上工作(使用 IE9)。在输入一些文本并单击提交时,文本未按预期列出。另外,我希望从多个浏览器实例更新列表,但它不会发生。没有错误。有人可以帮忙吗? C# names
找到后this update围绕与组的通信,似乎一个组与集线器名称无关。如果这是正确的(如果我弄错了,请告诉我)集线器有什么方法可以访问另一个集线器的组,或者更好地拥有某种全局组? 我的问题是我有一个
抽象的 嗨,我在考虑是否可以使用 SignalR 发送消息。假设客户端断开连接,但最终在很短的时间内(例如 3 秒)重新连接。客户端会在断开连接时收到所有发送给他的消息吗? 例如,让我们考虑 Long
我正在为中等负载的 Web 应用程序评估 SignalR。 我们期望大约 500 条消息/秒,这对 SignalR 来说应该不是问题。 但是,我们担心此解决方案的可靠性。我们的环境有一个有问题的网络,
我有以下JS工作: var chat = $.connection.appHub; 我的应用程序有一个单一的中心AppHub,它处理两种类型的通知-Chat和Other。我使用一个集线器,因为我需要一
我升级到.NET 4.5,现在SignalR似乎坚持要在Firefox / Chrome中使用WebSockets-即使我只是在没有WebSocket Server的Windows 7上使用。 该请求
您能否在服务器端辨别给定的SignalR连接使用哪种传输方法? (WebSocket,SSE,长时间轮询等?) 最佳答案 在集线器内部,您可以通过查看请求的查询字符串来检测正在使用的传输: Conte
我在MVC4应用程序中使用Visual Studio 2012 Ultimate RC,SignalR 0.5.1和Jquery 1.7.2。 我看过:MVC4 SignalR "signalr/hu
假设我的网络连接中断了几秒钟,并且我错过了一些 SignalR 服务器推送的消息。 当我重新获得网络连接时,我错过的消息是否会丢失?或者当我重新连接时 signalR 会处理它们并将它们推出吗? 如果
如果我有一个 signalR 集线器,它向所有具有相当大的有效负载或私有(private)信息的客户端发送消息,那么所有连接到该集线器的客户端(同一组的一部分)是否都会收到消息,即使它们没有订阅客户端
如果我有一个 signalR 集线器,它向所有具有相当大的有效负载或私有(private)信息的客户端发送消息,那么所有连接到该集线器的客户端(同一组的一部分)是否都会收到消息,即使它们没有订阅客户端
谁能让我知道 SignalR 内部是如何以高级方式工作的? 我猜测它正在使用 Response.Flush 刷新数据,并且在客户端以一定的时间间隔发送 Ajax 请求。正确吗? 最佳答案 不,Sign
我正在使用 Microsoft SignalR 向浏览器推送通知。这些通知是由其他浏览器的操作触发的。我想做一个有时发送通知的后台任务。例如,在 12:45:21,我想向所有连接的用户发出通知,即使他
我的 SignalR 存在以下问题,用户从移动设备访问我的网站。 问题在于,当手机锁定或用户转到另一个应用程序时,会在服务器上触发 Disconnect() 方法(我尝试向服务器发送消息并等待它通过
如果我使用 SignalR 发送消息,客户端是否可能收不到消息?您如何验证通信中是否出现任何错误?我想在发送服务器通知后将消息发送回服务器,但有没有更好的方法? 最佳答案 是的,客户端可能没有收到消息
Web 服务器如何使用 SignalR 同步调用客户端上的方法?这里的关键部分是服务器应该等待客户端将数据发送回服务器才能继续? 基本上,我希望将客户端方法调用视为 WCF 服务请求。调用客户端并等待
我正在尝试调试 SignalR 连接问题,虽然我知道如何启用客户端日志记录,但我不知道如何启用服务器端日志记录。它似乎没有将任何内容记录到控制台。 我试过在 HubConfiguration 中使用
如果 SignalR 服务器的内部缓冲区溢出,则它似乎可以在将消息发送到客户端之前丢弃消息(请参阅 https://github.com/SignalR/SignalR/issues/2075 )。目
我在 Blazor 服务器端应用程序中使用 SignalR。我将 Microsoft.AspNetCore.SignalR.Client Nuget 包 (v5.0.11) 添加到项目中,并使用以下代
我是一名优秀的程序员,十分优秀!