HubConnection.Start arroja error solo cuando se llama desde un objeto singleton

He construido un sistema de notificación con el siguiente código:

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 });
    }
}

Esto funciona muy bien cuando lo activo desde una aplicación de formularios de Windows de prueba (con un clic de botón), pero cuando llamo si desde un objeto único que tengo falla en el Inicio (). Espere (). He copiado y pegado el código y lo he comprobado varias veces para asegurarme de que no haya errores tipográficos.

Aquí está mi singleton de notificación. Hace más que el bit SignalR. actualiza bases de datos y más, pero aquí están las partes relevantes:

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 { }
    }

Excepción que estoy recibiendo:

Mensaje System.AggregateException: Se produjeron uno o más errores StackTrace: en System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) en System.Threading.Tasks.Task.Wait(Int32 milisegundosTimeout, CancellationToken cancelationToken) en System.Threading.Tasks. Tarea.Esperar()

preguntado el 09 de marzo de 12 a las 15:03

¿Qué excepción estás obteniendo? -

He agregado la excepción a la publicación. -

{"No se pudo cargar el archivo o ensamblado 'Newtonsoft.Json, Version=4.0.8.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' o una de sus dependencias. El sistema no puede encontrar el archivo especificado.":"Newtonsoft.Json, Version= 4.0.8.0, Cultura = neutral, PublicKeyToken = 30ad4fe6b2a6aeed"} -

Pero la ref. existe. Usé NuGet para instalarlo, así que tiene todo lo que necesita. -

1 Respuestas

Finalmente lo resolví. Mi sistema de notificación era una librería separada y el contenedor de mi ejecutable no estaba recibiendo los dlls de Newtonsoft.JSON. Agregué el paquete usando nuget a mis proyectos principales y funcionó de maravilla. @M.Babcock gracias por guiarme en la dirección correcta. miré las excepciones pero estaba mirando la que decía "InnerExceptions" (la que tiene s), que no tenía ninguna información. pero cuando busqué en "InnerException" encontré más información.

respondido 09 mar '12, 17:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.