user1213831
user1213831

Reputation: 309

SignalR as WCF web socket service

Is it possible to host SignalR as a part of WCF websocket service and not as a part of ASP.net web site. I am aware about pushing mesage from a web service to signalR clients but is it also possible tht when the socket connection is opened from browser it maps to a web serivce contract?

Upvotes: 3

Views: 5037

Answers (2)

Chriseyre2000
Chriseyre2000

Reputation: 2053

You can self-host the SignalR server:

Taken from (https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs):

Getting Started To get started, Install the following packages:

Install-Package Microsoft.Owin.Hosting -pre
Install-Package Microsoft.Owin.Host.HttpListener -pre
Install-Package Microsoft.AspNet.SignalR.Owin -pre

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;

namespace SignalR.Hosting.Self.Samples
{
class Program
{
    static void Main(string[] args)
    {
        string url = "http://172.0.0.01:8080";

        using (WebApplication.Start<Startup>(url))
        {
            Console.WriteLine("Server running on {0}", url);
            Console.ReadLine();
        }
    }
}

class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // This will map out to http://localhost:8080/signalr by default
        // This means a difference in the client connection.

        app.MapHubs();
    }
}

public class MyHub : Hub
{
    public void Send(string message)
    {
        Clients.All.addMessage(message);
    }
}

}

Upvotes: 5

Faisal Mansoor
Faisal Mansoor

Reputation: 2041

You can host the SignarR hub in any .Net application, like:

public class Program
{
public static void Main(string[] args)
{
    // Connect to the service
    var hubConnection = new HubConnection("http://localhost/mysite");

    // Create a proxy to the chat service
    var chat = hubConnection.CreateProxy("chat");

    // Print the message when it comes in
    chat.On("addMessage", message => Console.WriteLine(message));

    // Start the connection
    hubConnection.Start().Wait();

    string line = null;
    while((line = Console.ReadLine()) != null)
    {
        // Send a message to the server
        chat.Invoke("Send", line).Wait();
    }
}
}

Ref: https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs

If there any specific reason you want to use WCF? you can write your service as SignarR hub only.

Upvotes: 2

Related Questions