我正在处理一段代码,该代码将一个API请求接收到WebAPI控制器,并通过该请求调用WCF Web服务。这会阻止,直到WCF服务响应并导致问题,如超时和性能问题。出于许多我无法控制的原因,我无法使用异步/等待处理此特定用例。从后台线程调用WCF服务
我期待在一个单独的线程踢这个WCF取消呼叫,所以在控制器的WebAPI我做这样的事情:
New Thread(()=>{
//Call WCF service here
//Do something with the response
}).Start();
但是,代码是吹起来。调用WCF服务的线路未被更改为上述代码块,但现在我得到:
无法访问处置的对象。对象名称: 'System.ServiceModel.Channels.ServiceChannel'。
望着当抛出异常的堆栈跟踪,我可以看到服务器堆栈跟踪如下:
服务器堆栈跟踪:在 System.ServiceModel.Channels.CommunicationObject.ThrowIfDisposedOrImmutable() 在System.ServiceModel.Channels.CommunicationObject.Open(时间跨度 超时)在 System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel 信道,时间跨度超时)在 SYST em.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(时间跨度 超时,CallOnceManager级联)在 System.ServiceModel.Channels.ServiceChannel.Call(字符串动作, 布尔单向,ProxyOperationRuntime操作,对象[]插件, 对象[]奏,时间跨度超时)在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage 包括methodCall,ProxyOperationRuntime操作)在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天 消息)
Im不经历巨大与WCF如此想知道是否有关于卡尔的一些怪癖在后台线程中使用该服务,或者如果还有其他事情需要我去做?
我试着用搜索引擎这一点,但所有的结果都属于调用从后台线程内 WCF服务,而不是从后台调用WCF服务。
任何想法?