Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 信号器:在收到调用结果之前连接已断开_C#_Signalr - Fatal编程技术网

C# 信号器:在收到调用结果之前连接已断开

C# 信号器:在收到调用结果之前连接已断开,c#,signalr,C#,Signalr,在我的一个WCF服务(无状态)中,我想通过信号器发送消息。因为服务是无状态的,并且集线器位于另一台机器上,所以我连接到SignalR,发送消息,然后断开连接 proxy.Connect().Wait(); proxy.SendMessageToUsers(receiverUserNames, message).Wait(); proxy.Disconnect(); 有时会出现InvalidOperationException(在收到调用结果之前断开了连接) 我从这篇文章()中了解到。等待不是一

在我的一个WCF服务(无状态)中,我想通过信号器发送消息。因为服务是无状态的,并且集线器位于另一台机器上,所以我连接到SignalR,发送消息,然后断开连接

proxy.Connect().Wait();
proxy.SendMessageToUsers(receiverUserNames, message).Wait();
proxy.Disconnect();
有时会出现InvalidOperationException(在收到调用结果之前断开了连接)

我从这篇文章()中了解到。等待不是一个好主意。但我想我需要等待Connect和SendMessage完成,然后才能断开连接

proxy.Connect().Wait();
proxy.SendMessageToUsers(receiverUserNames, message).Wait();
proxy.Disconnect();
那么,我还能做什么

致以最良好的祝愿,
Stefan

由于代码是同步的,因此该错误是有意义的。因此,可以在接收调用结果之前调用
Disconnect

那么

Task.Factory.StartNew(async() => {
    await proxy.Connect();
    await proxy.SendMessageToUsers(receiverUserNames, message);
    await proxy.Disconnect();
});

这样,您就可以确保在发送消息之前不会调用
proxy.Disconnect()

这可能是因为您返回了实体框架对象

执行此操作时,请确保首先从上下文中删除它们,如:

public List<Models.EF.Inventarisatie.ScannerAanmelding> GetRecentSessions()
{
    using (var db = new Models.EF.Inventarisatie.inventarisatieEntities())
    {
        var result = db.ScannerAanmelding
            .Where(sa => sa.FK_Inventarisatie_ID == MvcApplication.Status.Record.PK_Inventarisatie_ID)
            .GroupBy(sa => sa.FK_Scanner_ID)
            .Select(sa => sa.OrderByDescending(x => x.Moment).FirstOrDefault())
            .ToList();
        // make sure to disconnect entities before returning the results, otherwise, it will throw a 'Connection was disconnected before invocation result was received' error.
        result.ForEach((sa) => db.Entry(sa).State = System.Data.Entity.EntityState.Detached);
        return result;
    }
}
公共列表GetRecentSessions() { 使用(var db=new Models.EF.Inventarisatie.inventarisatieenties()) { var结果=db.ScanneRanMelling .Where(sa=>sa.FK\u Inventarisatie\u ID==mvcapapplication.Status.Record.PK\u Inventarisatie\u ID) .GroupBy(sa=>sa.FK\u Scanner\u ID) .Select(sa=>sa.OrderByDescending(x=>x.矩).FirstOrDefault()) .ToList(); //请确保在返回结果之前断开实体,否则,它将抛出“在收到调用结果之前断开连接”错误。 result.ForEach((sa)=>db.Entry(sa.State=System.Data.Entity.EntityState.Detached); 返回结果; } }
这对我来说毫无意义。是proxy.SendMessageToUsers(receiverUserNames,message).Wait();与wait proxy.SendMessageToUsers(接收方用户名、消息)不同?嗯,我发现自己的例子是,
Wait()
不起作用,但
Wait
起作用。试一下需要2秒钟