提问者:小点点

SignalR使用WCF服务自托管,客户端将是桌面用户


我的场景是,我需要一个SignalR自托管WCF服务,该服务可以响应并向来自W的所有连接用户发送消息或WPF。

我已经尝试了很多如下:

  • 我使用SignalR自托管代码创建了WCF服务,如下所示,其中包含3个类和1个接口。
        namespace SignalRServiceClass
{
    [ServiceContract]
    public interface ISignalRServiceClass
    {
        [OperationContract]
        string GetsMessage(string name);
        [OperationContract]
        void Configuration(IAppBuilder app);

        [OperationContract]
        void Send(string name, string message);
    }
}
namespace SignalRServiceClass
{
    public class SignalRServiceClass : ISignalRServiceClass
    {
        public string GetsMessage(string name)
        {
            return "Message From Service " + name + "!";
        }
    }
}
namespace SignalRServiceClass
{
    class ClassHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addMessage(name, message);
        }
    }
}

namespace SignalRServiceClass
{
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
           // app.UseCors(CorsOptions.AllowAll);
           // app.MapSignalR();
            app.Map("/signalr", map =>
                {
                    map.UseCors(CorsOptions.AllowAll);
                    var hubConfiguration= new HubConfiguration
                    {
                        EnableDetailedErrors=true,
                        EnableJSONP= true
                    };
                    map.RunSignalR(hubConfiguration);
                });
        }
    }
}

和第二个通知客户端。我在这里对如何在这里管理客户端代码感到困惑,但我在下面放了一些用于测试的代码。


 private void button1_Click(object sender, EventArgs e)
        {
            //MessageBox.Show(test.GetsMessage("This is the Test Message"));

            var hubConnection = new HubConnection("http://localhost:50172/");
            var serverHub = hubConnection.CreateHubProxy("MessageRecievingHub");
            serverHub.On("broadCastToClients", message => MessageBox.Show(message));
            hubConnection.Start().Wait();
        }

请以这种方式指导我。您的帮助将不胜感激。我已经尝试并谷歌了很多,但徒劳无功。

提前非常感谢。


共3个答案

匿名用户

您不想要SignalR,您需要XSockets WCF示例

匿名用户

SignalR和WCF不会以这种方式互操作,也不需要这样做。如果您使用的是SignalR,则没有理由使用WCF-您可以在IIS或自托管上发布集线器(请参阅asp.net/signalr的入门教程和自托管教程),并使用桌面或JavaScript/超文本标记语言客户端连接到它。

匿名用户

您可以轻松创建一个.NET客户端应用程序来与您的SignalR服务器通信-下面是一个简单的WinForm.NETC#客户端,用于发送和接收SignalR消息:

namespace SignalrTestClient
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    async void Form1_Load(object sender, EventArgs e)
    {
        var hubConnection = new HubConnection("http://localhost:8080/");
        IHubProxy hubProxy = hubConnection.CreateHubProxy("MyHub");
        await hubConnection.Start();
        hubProxy.On("addMessage", message => onData(message));
        await hubProxy.Invoke("Send", "Hello SignalR Server!");
    }

    private void onData(string msg)
    {
        Console.WriteLine(msg);
    }
}
}

在您的SignalR服务器中,您只需要以下集线器类:

public class MyHub : Hub
{
    public void Send(string message)
    {
        Console.WriteLine("Received a message from a client");
        if (message.Contains("Hello")) {
            Clients.All.addMessage("Well hello there client!");
        }
    }
}

也可以为SignalR创建C客户端