在SignalR.Net客户端中显式设置多个传输

本文关键字:设置 传输 SignalR Net 客户端 | 更新日期: 2023-09-27 18:21:12

是否可以在SignalR.Net客户端中显式设置两个(或多个)传输?

我可以使用以下代码设置单个传输:

_hubCn.Start(new LongPollingTransport());

在Javascript客户端中,可以使用:

connection.start({ transport: ['webSockets','longPolling'] });

然而,我在.Net客户端上没有发现允许这样做的重载。还有别的办法吗?

对于一点上下文,这个特殊用法在Silverlight 5应用程序中。我仍在探索这与正常的.Net或JS使用有什么不同。

在SignalR.Net客户端中显式设置多个传输

使用自动传输:

var httpClient = new DefaultHttpClient();
_hubCn.Start(new AutoTransport(httpClient, 
    new IClientTransport[] 
    { 
        new WebSocketTransport(httpClient), 
        new LongPollingTransport(httpClient)
    }));

如源代码中所述,您提供的列表是:

后备顺序中的传输列表

如果在启动与.Net客户端的连接时不提供传输,它将使用所谓的AutoTransport,它基本上会尝试不同的传输,直到找到一个有效的传输。请注意,根据平台的不同(例如,.NET Framework与Silverlight/Portable),AutoTransport可用的传输列表可能会有所不同(目前您将在.NET上获得WebSockets、ServerSentEvents和LongPolling,在Portable上获得ServerSentEvent和LongPollling)。但是,如果您想排除(或添加-例如,有一个Windows Phone 8.1(通用应用程序)特定于WebSocket传输的实现)传输,您可以手动创建AutoTransport并提供您想要使用的传输。