gpt4 book ai didi

c# - N 层 WCF 应用程序中的 SignalR

转载 作者:行者123 更新时间:2023-12-02 22:21:41 29 4
gpt4 key购买 nike

我有一个 n 层应用程序,它有一个公开我所有业务逻辑的 WCF 服务,托管为一个 Windows 服务,一个 MVC 应用程序作为客户端,使用这些服务。

大多数示例都显示了 MVC 应用程序中的 SignalR。我试过将集线器提取到一个单独的 DLL 中,如下所示:

Hub.dll

public class Chat : Hub
{

public void Send(string message)
{
Clients.All.addMessage(message);
}
}

并尝试从我的 MVC cshtml 调用 Send(),即使在添加 Hub.dll 作为引用之后,也不起作用。

这是我的 cshtml 文件中的 javascript:

<script type="text/javascript">
$(function() {
// Proxy created on the fly
var chat = $.connection.chat;

// Declare a function on the chat hub so the server can invoke it
chat.client.addMessage = function(message) {
$('#messages').append('<li>' + message + '</li>');
};

// Start the connection
$.connection.hub.start().done(function() {
$("#broadcast").click(function() {
// Call the chat method on the server
chat.server.send($('#msg').val());
});
});
});
</script>

虽然上面的代码是一个非常基本的示例,但我想要完成的示例类似于那些 SignalR 进度条教程,除了进度报告将由我的业务层完成。

为了进一步阐述,我想做这样的事情:

1) MVC 客户端通过托管的 WCF 服务调用 PerformLongRunningTaskA()。

2) WCF服务调用业务层方法

3)业务层启动PerformLongRunningTaskA()

4) 业务层向 MVC 客户端报告进度 10%..20%..等直到 100%(使用 SignalR?)

我的项目结构大致是这样的:演示文稿 - MVC 应用程序服务层 - WCF 服务(托管在 Windows 服务上)业务层——我所有的业务逻辑数据层 - Entity Framework

编辑:

以上内容现在有效。这是我的一些 javascript 错误。

我创建了另一个控制台应用程序来模拟我的业务 DLL 来触发信号器来广播这样的事件:

class Program
{
static void Main(string[] args)
{
Say("HEY");
}
public static void Say(string message)
{
var context = GlobalHost.ConnectionManager.GetHubContext<Chat>();
context.Clients.All.say(message);
}
}

我已添加 Hub.dll 作为对我的控制台项目的引用,但上面的内容现在不起作用。没有错误信息,什么都没有。它只是正常运行,但我的 MVC 应用程序不显示消息。

最佳答案

如果您假装广播您需要处于“服务上下文”中的消息,我的意思是您必须能够访问托管的 Hub 上下文。

如果您需要从控制台应用程序进行广播,您可以在 Hub 中创建允许您这样做的方法,并使您的控制台应用程序成为主 SignalR 服务器的客户端。有关如何创建 .net 控制台 SignalR 客户端的详细信息:SignalR Client Hubs

如果您需要在控制台应用程序中拥有“托管上下文”,请尝试使用 SelfHost SignalR SelfHost

干杯,

关于c# - N 层 WCF 应用程序中的 SignalR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13627502/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com