将 .Net Remoting 从框架 2 迁移到框架 4 时出现的问题

问题描述 投票:0回答:2

我目前有一个在 IIS 下的 Framework 2 上运行的 .Net Remoting 应用程序。我必须将其升级到 Framework 4 才能使用一些新组件。我已经能够在框架 2 上顺利设置并运行所有内容,但是一旦更改为框架 4,当我尝试调用远程对象的某个函数时,就会出现以下异常。

The input stream is not a valid binary format. 
The starting contents (in bytes) are: 
53-79-73-74-65-6D-2E-52-75-6E-74-69-6D-65-2E-52-65 ...

这个错误不是真正的错误,它是由于远程对象抛出异常而引起的,IIS 将异常包装在 XML 中,从而抛出了 BinaryFormatter。 有关该错误的更多信息,请参阅此内容

这是非常不幸的,因为我看不到是什么导致了异常,而且之前从未使用过任何远程处理,我对从哪里开始调试没有太多想法。似乎在进入代码之前就抛出了异常,因为我做了相当多的日志记录,但似乎没有一个被触发。

基本上,我正在寻找遇到类似问题的人的一些线索或指示:

  • 除了代码没有更改之外,什么可能导致异常 从 .Net 2 编译到 .Net 4?
  • 如何获取返回的完整异常消息?

这是获取远程对象的代码

Dim clientProvider As BinaryClientFormatterSinkProvider = New BinaryClientFormatterSinkProvider()
Dim serverProvider As BinaryServerFormatterSinkProvider = New BinaryServerFormatterSinkProvider()
serverProvider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full

tsChannelName = System.Guid.NewGuid().ToString()

Dim props As IDictionary = New Hashtable()
props("port") = 0
props("name") = tsChannelName
props("typeFilterLevel") = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full
props("secure") = True
props("useDefaultCredentials") = True

Dim Channel As HttpChannel = New HttpChannel(props, clientProvider, serverProvider)

ChannelServices.RegisterChannel(Channel, False)

//Get the object on the Server
Dim rtnComm As I_CMQCComm = Activator.GetObject(GetType(I_CMQCComm), server)

//Knock knock
rtnComm.IsAlive() 'Exception is thrown here

我可以根据需要提供更多信息。

c# .net vb.net remoting .net-remoting
2个回答
0
投票

好吧!

首先,要查看错误,建议更改使用的格式化程序,这样就可以看到整个错误。

基本上,我的服务器不可用,IIS 会发回 HTML,从而导致格式化程序失效。

如何查看错误:

Dim clientProvider As SoapClientFormatterSinkProvider = New SoapClientFormatterSinkProvider()
Dim serverProvider As SoapServerFormatterSinkProvider = New SoapServerFormatterSinkProvider()

不要忘记更改 Web.Config 文件

<channels>
      <channel ref="http" >
         <serverProviders>
             <formatter ref="soap" />
          </serverProviders>
          <clientProviders>
             <formatter ref="soap" />
           </clientProviders>
      </channel>
</channels>

服务器不可用是由于 IIS 中的错误所致。该错误记录在事件查看器中的应用程序下(控制面板 -> 管理工具 -> 事件查看器)。

我的错误是由于我更改了 Machine.config 文件,导致 IIS 无法在用户 ASP_NET 下运行。然而我不知道的是每个框架都有一个文件。由于我禁用了用户 ASP_NET,IIS 根本没有用户启动 aspnet_wp.exe 进程。

小错误,希望这可以帮助一些人调试他们的.Net Remoting。 它在.Net 4下完美运行!


0
投票

我在 IIS 中遇到了这样的问题,当使用 NetTcpBinding 在另一个域上调用 WCF 服务时,导致了所描述的异常。我的 .Net Remoting 域使用 .Net Framework 4.8 通过 HTTP 在 IIS 上运行。使用像 Wireshark 这样的 HTTP 嗅探器,我发现没有请求到达第三个域。 进一步的研究表明,该问题与请求的大小有关。当尝试以字节为单位发送文件时,超过特定大小限制会触发错误。我通过向 web.config 文件添加特定配置解决了这个问题。

<system.web>
<httpRuntime maxRequestLength="2147483647"/>
...
<system.web>
© www.soinside.com 2019 - 2024. All rights reserved.