簡體   English   中英

將.Net遠程遷移從框架2遷移到4的問題

[英]Issues with Migrating .Net Remoting from Framework 2 to 4

我目前在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無效。 有關此錯誤的更多信息,請參見此內容

這是非常不幸的,因為我看不到是什么導致了異常,並且之前從未使用過任何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下它可以完美工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM