Я использую запрос и ответ MassTransit с SignalR. Веб-сайт делает запрос к службе Windows, которая создает файл. Когда файл будет создан, служба Windows отправит ответное сообщение обратно на веб-сайт. Веб-сайт откроет файл и сделает его доступным для просмотра пользователями. Я хочу обработать сценарий, когда пользователь закрывает веб-страницу до создания файла. В этом случае я хочу, чтобы созданный файл был отправлен им по электронной почте.
Независимо от того, закрыл ли пользователь веб-страницу или нет, будет запущен обработчик сообщения для ответного сообщения. Что я хочу сделать, так это каким-то образом узнать в обработчике ответного сообщения, что веб-страница была закрыта. Это то, что я уже сделал. Это не работает, но иллюстрирует мои мысли. На веб-странице у меня есть
$(window).unload(function () {
if (event.clientY < 0) {
// $.connection.hub.stop();
$.connection.exportcreate.setIsDisconnected();
}
});
exportcreate — это имя моего концентратора. В setIsDisconnected я бы установил свойство для вызывающего абонента? Допустим, я успешно установил свойство, указывающее, что веб-страница закрыта. Как узнать это значение в обработчике ответного сообщения. Это то, что он делает сейчас
protected void BasicResponseHandler(BasicResponse message)
{
string groupName = CorrelationIdGroupName(message.CorrelationId);
GetClients()[groupName].display(message.ExportGuid);
}
private static dynamic GetClients()
{
return AspNetHost.DependencyResolver.Resolve<IConnectionManager>().GetClients<ExportCreateHub>();
}
Я использую идентификатор корреляции сообщений в качестве группы. Сейчас для меня очень важен ExportGuid в сообщении. Это используется для идентификации файла. Поэтому, если я собираюсь отправить созданный файл по электронной почте, я должен сделать это в обработчике ответов, потому что мне нужно значение ExportGuid. Если бы я сохранил значение Caller в своем концентраторе для закрытия веб-страницы, как бы я получил к нему доступ в обработчике ответов.
На всякий случай, если вам нужно знать. отображение определяется на веб-странице как
exportCreate.display = function (guid) {
setTimeout(function () {
top.location.href = 'GetExport.ashx?guid=' + guid;
}, 500);
};
GetExport.ashx открывает файл и возвращает его в качестве ответа.
Спасибо,
С уважением Бен