문제

I created a server hub in an asp.net application like below

public class Calc : Hub
{
    public void CalculateSomething(int a, int b)
    {
        // start working in a new thread
        var task = Task.Factory.StartNew(() => DoCalculate(a, b));

        // attach a continuation task to notify
        // the client when the work is done
        task.ContinueWith(t =>
        {
            System.Threading.Thread.Sleep(2000);
            Clients.addMessage(t.Result);
            Caller.notifyCalculateResult(t.Result);
            System.Threading.Thread.Sleep(2000);
            Caller.notifyCalculateResult("Completed");
            Clients.addMessage("Completed");
        });
    }

    private int DoCalculate(int p1, int p2)
    {
        // do some slow work on the input,
        // e.g. call webservice or I/O.
        int result = p1 + p2;
        //int result = DoSlowWork(p1, p2);
        return result;
    }
}

Now in another asp.net application I created a client using SiganlR client. But it's not working correctly. I am looking to get data from server as it pushes to client

using System.Threading.Tasks;
using SignalR;
using SignalR.Client;
using SignalR.Client.Hubs;
namespace WebApplication2
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // Connect to the service
            var hubConnection = new HubConnection("http://localhost:3119/");

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

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

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

            // Send a message to the server
            chat.Invoke("CalculateSomething", 1, 2).Wait();
        }

        private async void Print(object message)
        {
            Response.Write(message);
        }
    }
}

The console client application works fine. The main problem is with asp.net beacause it fails to the handle call back from server.

도움이 되었습니까?

해결책

Looks like you calling the server side method wrongly, try this

chat.Invoke("CalculateSomething", 1, 2).ContinueWith(task =>
{ 
  Console.WriteLine("Value from server {0}", task.Result);
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top