В SignalR для установки однократного соединения с сервером можно использовать Persistent Connection (постоянное соединение) вместо Hubs.
Вот пример кода для настройки однократного соединения с сервером при использовании SignalR в ASP.NET Web API:
1. Создайте класс, наследующийся от класса PersistentConnection:
```csharp
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using Microsoft.AspNet.SignalR.Infrastructure;
public class MyConnection : PersistentConnection
{
protected override Task OnConnected(IRequest request, string connectionId)
{
// Здесь могут быть дополнительные действия при подключении
return base.OnConnected(request, connectionId);
}
protected override Task OnReceived(IRequest request, string connectionId, string data)
{
// Обработка полученных данных
return base.OnReceived(request, connectionId, data);
}
protected override Task OnDisconnected(IRequest request, string connectionId, bool stopCalled)
{
// Здесь могут быть дополнительные действия при отключении
return base.OnDisconnected(request, connectionId, stopCalled);
}
}
```
2. В классе Startup, настройте маршрут для PersistentConnection, добавив его в конвейер соединений:
```csharp
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(YourNamespace.Startup))]
namespace YourNamespace
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR<MyConnection>("/myconnection");
}
}
}
```
3. Подключите SignalR-клиент на стороне клиента:
```javascript
<script src="https://ajax.aspnetcdn.com/ajax/signalr/jquery.signalR-2.4.2.min.js"></script>
<script>
var connection = $.hubConnection("/myconnection"); // Путь к PersistentConnection
var myHubProxy = connection.createHubProxy('myHub'); // Пример HubProxy (нужно использовать PersistentConnection)
// Обработчик получения данных
myHubProxy.on('someEvent', function (data) {
console.log(data);
});
connection.start().done(function () {
console.log('Соединение установлено');
// Дополнительные действия после установки соединения
}).fail(function (error) {
console.log('Ошибка соединения: ' + error);
});
</script>
```
В результате при запуске приложения web API будет создано одно соединение с сервером SignalR, а не новое соединение каждый раз при получении данных.