2012-03-12 12 views
2

SignalR .Netクライアントで動作するコンソールアプリケーションを取得しようとしていますが、ハブ上でメソッドを呼び出そうとするとエラーが発生します。ここでは、コンソールアプリケーションのための私のコードは次のとおりです。ここでSignalR .NET Client Invokeが例外をスローする

static void Main(string[] args) 
{    
    var connection = new HubConnection("http://localhost/SignalRTest"); 
    var myHub = connection.CreateProxy("SignalRTest.Classes.service"); 

    myHub.On<string>("addMessage", text => 
    { 
     Console.WriteLine(text); 
    }); 

    connection.Start().ContinueWith(task => 
    { 
     if (task.IsFaulted) 
     { 
      Console.WriteLine("There was an error opening the connection: {0}", task.Exception.GetBaseException()); 
     } 
     else {       
      Console.WriteLine("Connected."); 
     } 
    }).Wait(); 


    myHub.Invoke("Send", "Message from console.").ContinueWith(task => { 
     if (task.IsFaulted) 
     {     
      Console.WriteLine("There was an error calling Send: {0}", task.Exception.GetBaseException()); 
     } 
     else 
     { 
      Console.WriteLine("Send complete."); 
     } 

    }); 


    Console.ReadLine(); 

} 

は、ハブサーバーからです:

[HubName("service")] 
public class ServiceHub : Hub 
{ 
    public void Send(string message) 
    { 
     // Call the addMessage method on all clients 
     Clients.addMessage(message); 
    } 
} 

私はそれを書き出しますので、コンソールアプリケーションが正しく接続されていることを前提とし「接続」をしかし、サーバー上でSendメソッドを呼び出そうとすると、次のエラーが発生します。

System.Net.WebException:リモートサーバーからエラーが返されました:(500)内部サーバーエラー。、System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at SignalR.HttpHelper。 <> C_ DisplayClass2.b _0(たIAsyncResultのAR) System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Funcで2 ENDMETHOD、TaskCompletionSource`1のTCS)

誰もが私が間違ってやっているものを私に伝えることができますか?ありがとう。

答えて

4

この問題は、無効なハブ名(CreateProxyを使用している場合)を使用したために発生しているように見えます。 startメソッドが失敗しないのは奇妙ですが、私はこれをテストしただけで、存在しないハブ名を使用した場合と同じ動作をします。

+0

これはうまくいきました。ありがとう!私はこの[HubName( "service")]でハブ名を変更できると思った。それはjavascriptクライアントでは動作しましたが、コンソールクライアントでは動作しませんでした。しかし、それは私がそれを必要としなかったので今は重要ではありません。あなたの助けをもう一度ありがとう。私はそれが近いとは信じられません。 – jmac

+0

@jmacなので、変更しました。var myHub = connection.CreateProxy( "SignalRTest.Classes.service"); var myHub = connection.CreateProxy( "service");または属性[HubName( "service")]を削除しましたか? –

+0

@Prera​​kKこれはほぼ2年前のことであることに留意してください。問題は 'var myHub = connection.CreateProxy(" service ")'でした。 hubname属性は実際のエンドポイントではなく生成されたjavascriptにのみ影響するため、これは間違っていました。正しい行は 'var myHub = connection.CreateProxy(" ServiceHub ")' –

0

SignalR.hosting.AspNet dllが追加されていないため、このエラーが作成されています。したがって、まず、サーバーにSignalR.Hosting.AspNetというdllを含めます。

関連する問題