WCF SSE通过信号机

WCF SSE通过信号机,wcf,c#-4.0,signalr,Wcf,C# 4.0,Signalr,我有几个不同的WCF服务正在运行。我想向运行IE 11的客户发送单向消息。我希望以类(ServiceName、Message、MessageDT)的形式发送消息,然后任何侦听特定服务的客户端都将接收消息,并将其显示给用户。我已经看过一些关于SignalR的教程,它们似乎都是稍微不同的场景,比如聊天应用程序。即使是股票代码示例,也有这个随机类,它在计时器上工作以更新股票价格。这令人困惑。有没有人有一个关于如何做我想做的事情的很好的示例教程?最后,我终于明白了这一点,所以我想我会为那些有需要的人发布

我有几个不同的WCF服务正在运行。我想向运行IE 11的客户发送单向消息。我希望以类(ServiceName、Message、MessageDT)的形式发送消息,然后任何侦听特定服务的客户端都将接收消息,并将其显示给用户。我已经看过一些关于SignalR的教程,它们似乎都是稍微不同的场景,比如聊天应用程序。即使是股票代码示例,也有这个随机类,它在计时器上工作以更新股票价格。这令人困惑。有没有人有一个关于如何做我想做的事情的很好的示例教程?

最后,我终于明白了这一点,所以我想我会为那些有需要的人发布答案

首先,我用消息类创建了一个类库(WMAppLib):

Public Class VirtualConsoleMessage
    Private m_AppName As String
    Public Property AppName() As String
        Get
            Return m_AppName
        End Get
        Set(value As String)
            m_AppName = value
        End Set
    End Property
    Private m_MessageDT As DateTime
    Public Property MessageDT() As DateTime
        Get
            Return m_MessageDT
        End Get
        Set(value As DateTime)
            m_MessageDT = value
        End Set
    End Property
    Private m_Message As String
    Public Property Message() As String
        Get
            Return m_Message
        End Get
        Set(value As String)
            m_Message = value
        End Set
    End Property
End Class
然后在我的Web应用程序中,我添加了信号器引用,以及对类库的引用。然后我创建了一个中心:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System.Threading.Tasks;
using WMAppLib;

namespace WMApp_WebAdmin
{
    [HubName("VirtualConsoleMessageHub")]
    public class Virtual_ConsoleHub : Hub
    {
        public void AddSubscription(string AppName)
        {
            Groups.Add(Context.ConnectionId,AppName);
        }
        public void BroadcastMessage(VirtualConsoleMessage vcm)
        {
            string strClientMessage = vcm.MessageDT.ToString("MM/dd/yyyy hh:mm:ss tt") + " : " + vcm.Message;
            Clients.Group(vcm.AppName).newMessageReceived(strClientMessage);
        }
    }
}
我的网页(VirtualConsole)具有以下标记:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VirtualConsole.aspx.cs" Inherits="WMApp_WebAdmin.VirtualConsole" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Virtual Console</title>
    <link href="/CSS/styleVC.css" type="text/css" rel="stylesheet" />
    <script src="/JS/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/jquery.signalR-2.2.0.min.js" type="text/javascript"></script>
    <script src="signalr/hubs"></script>
    <script src="/JS/VirtualConsole.js" type="text/javascript""></script>
</head>
<body>
    <form id="form1" runat="server">
        <div id="divConsole" runat="server">
        </div>
        <asp:HiddenField ID="AppName" runat="server" />
        <asp:HiddenField ID="Endpoint" runat="server" />
        <asp:HiddenField ID="AssemblyName" runat="server" />
        <asp:HiddenField ID="ClassName" runat="server" />
    </form>
</body>
</html>
在我的Public Sub New()中,我在App.config中将这些值设置为:

virtualConsoleHubConnection = New HubConnection(ConfigurationManager.AppSettings("virtualConsoleHubURL"))
virtualConsoleHubProxy = virtualConsoleHubConnection.CreateHubProxy(ConfigurationManager.AppSettings("virtualConsoleHubName"))
这些在App.Config中设置为:

<add key="virtualConsoleHubURL" value="http://localhost:49716/signalr/hubs"/>
<add key="virtualConsoleHubName" value="VirtualConsoleMessageHub"/>
然后,每当我做Console.WriteLine时,我就叫它sub:

WriteToVirtualConsole(New VirtualConsoleMessage With {.AppName = "MyWCFService", .MessageDT = Now, .Message = "I just did something"})
然后它会显示在我的网页虚拟控制台页面上

<add key="virtualConsoleHubURL" value="http://localhost:49716/signalr/hubs"/>
<add key="virtualConsoleHubName" value="VirtualConsoleMessageHub"/>
Private Sub WriteToVirtualConsole(ByVal vcm As VirtualConsoleMessage)
    Try
        virtualConsoleHubConnection.Start()
        virtualConsoleHubProxy.Invoke("BroadcastMessage", vcm)
    Catch ex As Exception
    Finally
        If virtualConsoleHubConnection.State = Microsoft.AspNet.SignalR.Client.ConnectionState.Connected Then
            virtualConsoleHubConnection.Stop()
        End If
    End Try
End Sub
WriteToVirtualConsole(New VirtualConsoleMessage With {.AppName = "MyWCFService", .MessageDT = Now, .Message = "I just did something"})