как интегрировать страницу asv.net mvc, содержащую signalR, с другими платформами

Вопрос не является дубликатом этот, хотя на упомянутый вопрос есть несколько очень интересных ответов, которые помогли мне лучше понять мою проблему, но он не удовлетворяет мою потребность. Позвольте мне объяснить мой сценарий.

У меня есть веб-сайт asp.net mvc, имеющий функцию уведомлений и обновления данных в режиме реального времени от signalR & Зависимость от SQL Аутентификация пользователя выполняется с использованием Identity 2.0.
Только авторизованные пользователи могут видеть обновленные данные / уведомления. Кроме того, уведомления / обновления изменяются от пользователя к пользователю. Я добился этого, внедрив собственный поставщик UserId и используя UserId Identity.

Теперь я хочу достичь следующих целей.

  • Легкая часть: отображение содержимого страницы (панели инструментов) на других сайтах независимо от языка их разработки. Он может быть введен внутри существующей страницы или там, где они (другие сайты) хотят.

  • Сложная часть: Показать уведомления в реальном времени & обновления на интегрированной части на основе зарегистрированного пользователя.

Какой наилучший курс действий выполнить в этом сценарии?

Обновить
Поскольку первоначальный вопрос был отложен из-за отсутствия уточнения деталей, вот подробности, по которым я хотел бы получить предложения.

У меня есть сайт asp.net mvc, работающий на локальный: 54603, Ниже приводится действие домашнего контроллера

public ActionResult Index()
{
HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
return View();
}

Представление индекса имеет некоторую функциональность signalR. Ниже приведена начальная конфигурация signalR, чтобы разрешить CORS, так как моя цель — предоставить клиенту индексную страницу и всю ее функциональность (запуск 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">

<! &ndash; 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">
<! &ndash; 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>

<! &ndash; 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 выдает ошибку. Ниже приведены сообщения консоли.

ПОЛУЧИТЬ HTTP: // локальный: 54603 / Home / Index 200 ОК, 1.18 с
Не удалось подключиться Ошибка: ошибка во время запроса на согласование.

Что я делаю не так, что вызывает эту ошибку?

4

Решение

Трудно точно определить, что вам нужно сделать, потому что вопрос довольно широкий, но я надеюсь, что эти пункты помогут (ред):

Междоменный сигнал SignalR использует JavaScript на стороне клиента и CORS на стороне сервера, так что вы находитесь на этом фронте. Вы можете легко создать файл JavaScript, который может подключаться к каналу SignalR без каких-либо изменений в коде PHP, за исключением включения JavaScript на странице клиента.

Вы можете довольно легко создать на своем сервере один скрипт, на который клиент может ссылаться на своей странице, который перетягивает все необходимое на страницу клиента. Поскольку скрипт выполняется с вашего собственного сервера, я не думаю, что вам нужно беспокоиться о CORS, потому что он не является «межсайтовым скриптингом», потому что код, выполняющий запросы, будет «принадлежать» вашему серверу / домену.

Что касается аутентификации, если доступ к аутентификации нужен только вашему сценарию, я думаю, это означает, что вы также можете использовать аутентификацию вашего домена (куки-файлы и т. Д.), Но мне придется проверить его. В конечном итоге вы будете аутентифицировать их, используя HTTP-запрос к вашему домену из включенного скрипта?

Вот несколько полезных тем, которые могут помочь с этим:

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector