我有一个.NET应用程序,它在管理控制台和服务器应用程序之间使用远程处理。
在特别长时间运行的远程呼叫期间,我将收到一条错误消息,如下所示。
我已将赞助商添加到客户端以防止Remoting连接被关闭,并且我已经验证正在调用Renew()方法。
我用谷歌搜索了这个错误,但没有出现任何问题。我不确定这里的问题是什么,所以感谢任何帮助。
值不能为空。 参数名称:returnHeaders
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
异常详细信息:System.ArgumentNullException:Value不能为null。
参数名称:returnHeaders
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
堆栈追踪:
[ArgumentNullException:Value不能为null。
参数名称:returnHeaders]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)+7596735
答案 0 :(得分:3)
好吧,看看syncfusion.com上找到的共享源,并检查SecurityPermissions属性here,我可以猜到BinaryFormatter(你没说哪个?)未能成功 - 对相关对象进行序列化。
既然你提到它特别是一个长时间的调用,那么在try
/ catch
块中包装远程调用并包含一个完整的堆栈来查看它的确切位置可能是值得的。失败......更好的是,如果InnerException不为null,请包含那个....或者做这样的事情......好吧,这可能听起来像是hackish ......而且可能会失败......
在服务器端,创建一个虚拟方法......例如
void FuBar(void){ int foo = 3, bar = 4, baz = 0; baz = foo + bar; }
当您调用长时间运行的过程时,在后台生成一个线程以重复调用FuBar
方法以确保远程服务器不会过期,并且当调用完成时,终止线程... < / p>
我的猜测是,经过一段时间后,远程通话失败了,尽管更新了赞助商......
或者它可能是套接字超时?我没有想法......
希望这有帮助, 最好的祝福, 汤姆。