HubConnection.Start выдает ошибку только при вызове из одноэлементного объекта - PullRequest
3 голосов
/ 09 марта 2012

Я построил систему уведомлений со следующим кодом:

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 * * * * * ()

1 Ответ

2 голосов
/ 09 марта 2012

Я наконец понял это. Моя система уведомлений была отдельной библиотекой, и бункер моего исполняемого файла не получал DLL-файлы Newtonsoft.JSON. Я добавил пакет, используя nuget, в мои основные проекты, и он работал как шарм. @ М.Бабкок, спасибо, что привел меня в правильном направлении. я посмотрел на исключения, но я смотрел на тот, который сказал "InnerExceptions" (тот, с s ), который не имел никакой информации. но когда я посмотрел в "InnerException", я нашел больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...