C# 调用远程对象时System.Runtime.Remoting.RemotingException';s属性

C# 调用远程对象时System.Runtime.Remoting.RemotingException';s属性,c#,.net,remoting,C#,.net,Remoting,我正在维护一个遗留模块,系统从用户(asp.net)获取一些信息,然后通过远程处理调用远程服务器,在连接到远程服务器的打印机上打印收据。直到最近,远程服务器才能够连接到数据库,所以我们只传递了一个int值(paymentId) 但是现在,我们的主应用程序(asp.net)正在与数据库一起移动到异地,但是收据打印仍然需要工作,所以现在,我们尝试发送所有收据的信息,以便服务器可以从中生成收据,而不是使用id并从数据库生成收据。所以,这个概念很基本,除了。。。远程操作有时有点痛苦 我的对象可序列化,并

我正在维护一个遗留模块,系统从用户(asp.net)获取一些信息,然后通过远程处理调用远程服务器,在连接到远程服务器的打印机上打印收据。直到最近,远程服务器才能够连接到数据库,所以我们只传递了一个int值(paymentId)

但是现在,我们的主应用程序(asp.net)正在与数据库一起移动到异地,但是收据打印仍然需要工作,所以现在,我们尝试发送所有收据的信息,以便服务器可以从中生成收据,而不是使用id并从数据库生成收据。所以,这个概念很基本,除了。。。远程操作有时有点痛苦

我的对象可序列化,并从MarshalByRefObject继承。它包含一些int、decimal和string属性。该对象通过并似乎被正确序列化和反序列化,但当调用任何属性时,我收到异常。我在其他帖子/论坛上读到,我必须在我的客户端应用程序(asp.net)上打开客户端通道,但我感到困惑

我的客户端应用程序连接到许多这样的远程处理服务,这取决于它必须打印的打印机。我必须为每个通道创建一个客户端通道吗?我可以在连接到服务器时“按需”配置客户端频道,还是必须在应用程序启动时创建客户端频道?我可以指定何时连接(Activator.GetObject(…)以使用双向通道吗?是否有一种方法不需要客户端通道(如将所有属性转换为字段或其他内容)

这是我的堆栈跟踪(因此我们看到问题是PaymentID属性,它是第一个被访问的属性):


最后,由于我的数据结构只使用基本数据类型,我通过将其从类更改为结构来确保它作为值类型传输。它现在工作得很好。

看起来您没有代理,这将引发RemoteException。当应用程序启动时,您不必设置所有客户端通道,但在使用代理时,您必须有一个从代理到真实对象的实时通道。这()是一个可以帮助您解决问题的资源。谢谢。在激活对象之前,我现在在端口0上创建一个TCP通道,注册它,调用对象上的方法,然后注销通道。如果我的两个应用程序都在同一台计算机上,它就可以完美地工作,但是如果它们在不同的计算机上,它就不能工作。在不同的计算机上,我在第一次访问属性时遇到异常。我试图修改Windows防火墙设置(我无法禁用它,因为我在域上,无法控制该设置),但似乎没有问题。有人有主意吗?再次感谢
at System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke(IMethodCallMessage reqMcmMsg, Boolean useDispatchMessage, Int32 callType)
at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(IMessage reqMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at GDCMLib.Reports.DataSources.PaymentReceiptItem.get_PaymentID()
at GDCMLib.Services.PaymentReceiptPrintRemoteObj.PaymentReceiptPrint.PrintPaymentReceipt(PaymentReceiptItem paymentReceipt) in u:\SVNClient\PortailDCM\trunk\Libraries\GDCMLib.Services.PaymentReceiptPrintRemoteObj\PaymentReceiptPrint.cs:ligne 37