【发布时间】:2020-11-03 16:26:48
【问题描述】:
使用我拥有的 c# gRPC 服务器
IServerStreamWriter<ClientNotification> ClientNotificationStream发送用户通知
当我试图打电话给ClientNotificationStream.WriteAsync(parameters)
我有
System.ObjectDisposedException: 'IFeatureCollection has been disposed.
Object name: 'Collection'.'```
IFeatureCollection has been disposed.
Object name: 'Collection'.. Internal Error: StackTrace: at Microsoft.AspNetCore.Http.Features.FeatureReferences`1.ThrowContextDisposed()
at Microsoft.AspNetCore.Http.Features.FeatureReferences`1.ContextDisposed()
at Microsoft.AspNetCore.Http.Features.FeatureReferences`1.Fetch[TFeature](TFeature& cached, Func`2 factory)
at Microsoft.AspNetCore.Http.DefaultHttpContext.get_RequestAborted()
at Grpc.AspNetCore.Server.Internal.HttpContextServerCallContext.get_CancellationTokenCore()
at Grpc.Core.ServerCallContext.get_CancellationToken()
at Grpc.AspNetCore.Server.Internal.HttpContextStreamWriter`1.WriteAsync(TResponse message)
【问题讨论】:
-
我怀疑连接从未完成,然后被处理掉了。所以这是一个连接问题(除非你从未创建过对象)。
-
连接由 gRPC
service Connector{ rpc Start(ConnectorRequest) returns (stream ClientNotification); }创建,用户在调用 Start 方法时收到第一条消息。下次调用 WriteAsync 出错。 -
您有远程或本地客户端吗?请参阅:docs.microsoft.com/en-us/mem/configmgr/core/clients/manage/…
-
@jdweng 那是我的本地开发服务器。分离 gRPC 服务器和测试 gRPC 客户端。 Thay 都在我的本地服务器上运行。
-
我添加了
deadline:DateTime.UtcNow.AddMinutes(5)。之后我得到Error: The CancellationTokenSource has been disposed.. Internal Error: StackTrace: at System.Threading.CancellationTokenSource.ThrowObjectDisposedException() at System.Threading.CancellationTokenSource.get_Token() at Grpc.AspNetCore.Server.Internal.ServerCallDeadlineManager.get_CancellationToken() at Grpc.AspNetCore.Server.Internal.HttpContextServerCallContext.get_CancellationTokenCore() at Grpc.Core.ServerCallContext.get_CancellationToken()
标签: c# grpc .net-core-3.1