我使用以下代码构建了一个通知系统:
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(()(等待()时失败了。我复制粘贴代码并多次检查以确保没有拼写错误。
这是我的通知单身人士。它比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:在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout,CancellationToken cancellationToken) 在System.Threading.Tasks.Task.Wait()
答案 0 :(得分:2)
我终于明白了。我的通知系统是一个单独的lib,我的可执行文件的bin没有得到Newtonsoft.JSON dll。我使用nuget将包添加到我的主要项目中,它就像一个魅力。 @ M.Babcock感谢带领我走向正确的方向。我查看了异常,但我正在查看那个说“InnerExceptions”(带有 s 的那个)的那个,它没有任何信息。但当我查看“InnerException”时,我发现了更多信息。