gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:41 25 4
gpt4 key购买 nike

我目前有一个 .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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com