繁体   English   中英

N层WCF应用程序中的SignalR

[英]SignalR in an N-Tier WCF application

我有一个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%.. etc直到100%(使用SignalR?)

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

编辑:

以上工作。 我这是一些JavaScript错误。

我创建了另一个控制台应用程序,以模拟我的业务DLL以触发Signalr广播事件,如下所示:

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上下文。

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

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

干杯,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM