Вы можете сделать это следующим образом
var connection = new HubConnection(hubUrl);
if (configureConnection != null)
configureConnection(connection);
var proxy = connection.CreateHubProxy("EventAggregatorProxyHub");
connection.Reconnected += reconnected;
https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/blob/master/SignalR.EventAggregatorProxy.Client.DotNet/Bootstrap/Factories/HubProxyFactory.cs#L17
Других событий являются
- переподключение - сгорел, когда он пытается восстановить после подключения закрыто
- Closed - сгорело, когда соединение теряется
Update:
Closed
будет вызываться при повторном подключении не удалось (Когда IIS был вниз в течение более длительного периода, чем принятый Reconnect тайм-аут).
Это означает, что вы должны повторно подключиться к событию Close, используя connection.Start()
, когда он завершится неудачей. Закрытое событие будет вызвано снова и может снова повторить попытку с connection.Start()
.
Вот пример, используя мой код, он переживет и что IIS вниз при запуске приложения, и что он идет вниз, в то время как работает
public class HubProxyFactory : IHubProxyFactory
{
public IHubProxy Create(string hubUrl, Action<IHubConnection> configureConnection, Action<IHubProxy> onStarted, Action reconnected, Action<Exception> faulted, Action connected)
{
var connection = new HubConnection(hubUrl);
if (configureConnection != null)
configureConnection(connection);
var proxy = connection.CreateHubProxy("EventAggregatorProxyHub");
connection.Reconnected += reconnected;
connection.Error += faulted;
var isConnected = false;
Action start =() =>
{
Task.Factory.StartNew(() =>
{
try
{
connection.Start().Wait();
if(isConnected)
reconnected();
else
{
isConnected = true;
onStarted(proxy);
connected();
}
}
catch(Exception ex)
{
faulted(ex);
}
});
};
connection.Closed += start;
start();
return proxy;
}
}
Вы хотите перезагрузить весь сервер IIS или только рабочий процесс вашего приложения? –
Как триггер запланированной задачи или [служба Windows] (http://forums.iis.net/t/1180869.aspx?IIS+Windows+Service)? – lloyd
@AliHasan, я считаю, что оба будут такими же, но я больше знаю о перезагрузке рабочего процесса. – yogi