Я построил систему уведомлений со следующим кодом:
class SignalRClient
{
HubConnection hubconn;
IHubProxy proxy;
public SignalRClient(string url)
{
hubconn = new HubConnection(url);
proxy = hubconn.CreateProxy("XXX.NotificationHub");
hubconn.Start().Wait();
}
public void SendMessage()
{
proxy.Invoke("LiveNotify", new { Application = "SRWinClient", Server = Environment.MachineName, Message = "This is a test", ImgId= 2 });
}
}
Это прекрасно работает, когда я запускаю его из приложения тестовых форм Windows (по нажатию кнопки), но когда я звоню, если изсинглтон объект, который у меня есть, терпит неудачу на Start (). Wait ().Я скопировал, вставил код и несколько раз проверил, чтобы убедиться в отсутствии опечаток.
Вот мой извещатель синглтона.Это делает больше, чем бит SignalR.он обновляет базы данных и многое другое, но вот соответствующие части:
public class CDSNotifier
{
private static object mLock = new object();
private static CDSNotifier mnotifier = null;
private bool enableSignalRNotifications = false;
private SignalRNotifier snotifier;
private CDSNotifier()
{
NameValueCollection appSettings = ConfigurationManager.AppSettings;
try
{
enableSignalRNotifications = Convert.ToBoolean(appSettings["EnableSignalRNotifications"]);
}
catch { };
if (enableSignalRNotifications)
{
snotifier = new SignalRNotifier(appSettings["SignalRHubURL"]);
}
}
public static CDSNotifier Instance
{
get
{
if (mnotifier == null)
{
// for thread safety, lock an object when
lock (mLock)
{
if (mnotifier == null)
{
mnotifier = new CDSNotifier();
}
}
}
return mnotifier;
}
}
public void Notify(int applicationId, int? companyId, string message, NotificationType type, string server)
{
.....
try
{
if (enableSignalRNotifications)
snotifier.SendMessage(applicationId, message, type);
}
catch { }
}
Исключение, которое я получаю:
System.AggregateException Сообщение: произошла одна или несколько ошибок StackTrace: atSystem.Threading.Tasks.Task.ThrowIfExceptional (Boolean includeTaskCanceledExceptions) в System.Threading.Tasks.Task.Wait (Int32 миллисекундTimeout, CancellationToken cancellationToken) в System.Threading.Tasks.Task. 1012 * * * * * ()