我有一个.NET应用程序,它在管理控制台和服务器应用程序之间使用远程处理。

在运行时间特别长的远程调用期间,我将收到一条错误消息,如下所示。

我已将发起人添加到客户端以防止关闭远程连接,并且我已验证正在调用Renew()方法。

我已经搜索了错误,但没有太多提示。我不太确定这是什么问题,因此可以提供任何帮助。


  值不能为空。
  参数名称:returnHeaders
  
  说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
  
  异常详细信息:System.ArgumentNullException:值不能为null。
  
  参数名称:returnHeaders
  
  源错误:
  
  当前Web请求的执行期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来标识有关异常的来源和位置的信息。
  
  堆栈跟踪:
  
  [ArgumentNullException:值不能为null。
  
  参数名称:returnHeaders]
  
  System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)+7596735

最佳答案

好了,看看syncfusion.com上的Shared Source,并检查SecurityPermissions属性here,我可以猜到BinaryFormatter(您没有说哪个?)未能对有问题的对象进行反序列化。

既然您提到这是一个特别长的调用,那么将远程调用包装在try / catch块中并封装完整的堆栈以查看确切的失败位置可能是值得的……甚至更好,如果InnerException不为null,则包括该内容。...或执行类似的操作...好吧,这听起来可能有点黑...可能会失败...

在服务器端,创建一个虚拟方法...例如

无效FuBar(void){
   int foo = 3,bar = 4,baz = 0;
   baz = foo + bar;
}


当您调用长时间运行的过程时,请在后台生成一个线程以重复调用FuBar方法以确保远程服务器不会过期,并且当调用结束时,请杀死该线程...

我的猜测是,经过一段时间后,尽管续签了赞助商,但远程通话还是失败了...

还是套接字超时?我没主意...

希望这可以帮助,
最好的祝福,
汤姆

08-18 22:29
查看更多