【问题标题】:SignalR Client error when trying to connect to server with connection.Start()尝试使用 connection.Start() 连接到服务器时出现 SignalR 客户端错误
【发布时间】:2014-10-05 15:24:10
【问题描述】:

我正在使用来自 ASP.NET 网站的股票 SignalR 示例:

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-server-broadcast-with-signalr-20

服务器运行良好,JavaScript 客户端按预期工作并相互通信。服务器和 JavaScript 客户端在 IIS 上运行。

JavaScript 客户端位于:

http://192.168.1.5:8080/RTStreamer/SignalR.Sample/StockTicker.html

现在我正在尝试做一个 C# Windows Forms 客户端,但没有成功:

private void Form1_Load(object sender, EventArgs e)
{
    var connection = new HubConnection("http://192.168.1.5:8080/RTStreamer/signalr");
    IHubProxy proxy = connection.CreateHubProxy("StockTickerHub");

    try
    {
        connection.Start().Wait();
        var stocks = proxy.Invoke<IEnumerable<Stock>>("GetAllStocks").Result;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

尝试连接时出现此错误。Start():

System.AggregateException: One or more errors occurred. ---> Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Transfer-Encoding: chunked
  Cache-Control: private
  Date: Tue, 12 Aug 2014 13:46:31 GMT
  Server: Microsoft-IIS/8.5
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET
  Content-Type: text/html; charset=utf-8
}
   at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient.<>c__DisplayClass2.<Get>b__1(HttpResponseMessage responseMessage)
   at Microsoft.AspNet.SignalR.TaskAsyncHelper.<>c__DisplayClass19`2.<Then>b__17(Task`1 t)
   at Microsoft.AspNet.SignalR.TaskAsyncHelper.TaskRunners`2.<>c__DisplayClass3a.<RunTask>b__39(Task`1 t)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at TraderClient.Form1.Form1_Load(Object sender, EventArgs e) in c:\Ark\Form1.cs:line 31
---> (Inner Exception #0) Microsoft.AspNet.SignalR.Client.HttpClientException: StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Transfer-Encoding: chunked
  Cache-Control: private
  Date: Tue, 12 Aug 2014 13:46:31 GMT
  Server: Microsoft-IIS/8.5
  X-AspNet-Version: 4.0.30319
  X-Powered-By: ASP.NET
  Content-Type: text/html; charset=utf-8
}
   at Microsoft.AspNet.SignalR.Client.Http.DefaultHttpClient.<>c__DisplayClass2.<Get>b__1(HttpResponseMessage responseMessage)
   at Microsoft.AspNet.SignalR.TaskAsyncHelper.<>c__DisplayClass19`2.<Then>b__17(Task`1 t)
   at Microsoft.AspNet.SignalR.TaskAsyncHelper.TaskRunners`2.<>c__DisplayClass3a.<RunTask>b__39(Task`1 t)<---

这是集线器代码:

namespace Microsoft.AspNet.SignalR.StockTicker
{
    [HubName("stockTicker")]
    public class StockTickerHub : Hub
    {
        private readonly StockTicker _stockTicker;

        public StockTickerHub()
            : this(StockTicker.Instance)
        {

        }

        public StockTickerHub(StockTicker stockTicker)
        {
            _stockTicker = stockTicker;
        }

        public IEnumerable<StockQuote> GetAllStocks()
        {
            return _stockTicker.GetAllStocks();
        }

        ...

    }
}

【问题讨论】:

    标签: javascript c# signalr


    【解决方案1】:

    完全按照链接文章设置项目后,适用于我的 .NET 客户端具有以下代码:

    var connection = new HubConnection("http://localhost:65069/");
    IHubProxy proxy = connection.CreateHubProxy("stockTickerMini");
    
    try
    {
        connection.Start().Wait();
        var stocks = proxy.Invoke<IEnumerable<Stock>>("GetAllStocks").Result;
    }
    ...
    

    在我的示例中,StockTicker.html 页面位于 http://localhost:65069/StockTicker.html,根据属性,中心名称为 stockTickerMini

    在你的情况下,下面的值应该是正确的:

    var connection = new HubConnection("http://192.168.1.5:8080/RTStreamer");
    IHubProxy proxy = connection.CreateHubProxy("stockTicker");
    

    【讨论】:

    • 检查端点连接,站点为:192.168.1.5:8080/RTStreamer/signalr/…....
    • 另一个注意事项:为了匹配文章中模板操作安装的正确版本的 SignalR 东西,我从 Microsoft.AspNet.SignalR.Client 获得了 2.0.2 版本nuget,不是最新版本。 (不认为这很重要,但不想在测试中出现额外的变量)
    猜你喜欢
    • 2022-01-20
    • 2015-03-21
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多