C# 将.Net远程处理从Framework 2迁移到Framework 4时出现的问题

C# 将.Net远程处理从Framework 2迁移到Framework 4时出现的问题,c#,.net,vb.net,remoting,.net-remoting,C#,.net,Vb.net,Remoting,.net Remoting,我目前有一个.Net远程处理应用程序在IIS下的Framework 2上运行。为了使用一些新的组件,我必须将它升级到框架4。我已经能够在Framework2上设置并运行所有内容,但是一旦我切换到Framework4,当我尝试调用我的远程对象的一个函数时,就会出现以下异常 The input stream is not a valid binary format. The starting contents (in bytes) are: 53-79-73-74-65-6D-2E-52-75-

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

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 ...
这个bug不是真正的bug,它是由远程对象抛出异常,而IIS将异常包装为XML,从而抛出BinaryFormatter引起的。

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

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

  • 当没有代码更改时,什么可能导致异常 从.NET2编译到.NET4
  • 如何获取返回的完整异常消息
下面是获取远程对象的代码

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
我可以根据需要提供更多信息。

好的

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

基本上,我有一个服务器不可用,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\U NET下运行。但我不知道的是,每个框架都有一个文件。IIS根本没有用户启动aspnet_wp.exe进程,因为我禁用了用户ASP_NET

很小的错误,希望这能帮助一些人调试他们的.Net远程处理。 它在.NET4下工作得非常好

好吧

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

基本上,我有一个服务器不可用,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\U NET下运行。但我不知道的是,每个框架都有一个文件。IIS根本没有用户启动aspnet_wp.exe进程,因为我禁用了用户ASP_NET

很小的错误,希望这能帮助一些人调试他们的.Net远程处理。
它在.NET4下工作得非常好

您是否也为.NET4编译了客户端代码?是的!还将IIS更改为在ASP.NET 4上运行。通过将格式化程序更改为Soap,我成功地看到了确切的错误。我刚刚设法解决了这个问题,我将发布一个答案:)你也为.NET4编译了你的客户端代码吗?是的!还将IIS更改为在ASP.NET 4上运行。通过将格式化程序更改为Soap,我成功地看到了确切的错误。我刚刚设法解决了这个问题,我将发布一个答案:)