c# - 将 .Net Remoting 从 Framework 2 迁移到 4 的问题

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

我目前有一个 .Net Remoting 应用程序在 IIS 下的 Framework 2 上运行。我必须将它升级到 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?
  • 如何获取返回的完整异常消息?

这是获取远程对象的代码

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_NET 下运行。然而我不知道的是每个框架都有一个文件。 IIS 根本没有用户启动 aspnet_wp.exe 进程,因为我禁用了用户 ASP_NET。

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

关于c# - 将 .Net Remoting 从 Framework 2 迁移到 4 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506188/

相关文章:

c# - 如何从 webreference 调用 CreateUser 方法

.net - 在 DataTemplate 中使用 TextSearch.Text

c# - 如何获取 ObjectSet<T> 的实体键名?

c# - 按路径加载 XML 文件

.net - 在 VB.net 中找到获取当前日期/时间的所有方法

c# - 第一次调用 .net web 服务很慢

c# - 在Windows服务器中读取Excel

c# - 为所有泛型声明一次实现类型?

c# - 将 Properties.Settings.Default 项目保存到列表中,更改值,然后将其保存到文件中

vb.net - VShost32.exe 停止工作,但我可以继续调试