从框架2迁移到.Net Remoting的问题

时间:2012-02-29 20:34:24

标签: c# .net vb.net remoting .net-remoting

我目前在IIS下的Framework 2上运行了一个.Net Remoting应用程序。我必须将其升级到Framework 4才能使用一些新组件。我已经能够在Framework 2上顺利设置并运行一切,但是当我更改为Framework 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。 See this for more info on the bug

这是非常不幸的,因为我无法看到导致异常的原因,并且以前从未使用任何Remoting,我对于从何处开始调试没有太多想法。看起来甚至在进入代码之前就抛出了异常,因为我做了大量的日志记录,而且似乎都没有触发。

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

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

以下是获取远程对象的代码

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

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

1 个答案:

答案 0 :(得分: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中的错误。在事件查看器(控制面板 - &gt;管理工具 - &gt;事件查看器)中的应用程序下记录错误。

我的错误是因为我将Machine.config文件更改为IIS不会在用户ASP_NET下运行。然而,我不知道每个框架都有一个文件。 IIS因为禁用了用户ASP_NET,所以没有用户启动aspnet_wp.exe进程。

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