2012-02-29 24 views
2

現在、IISのFramework 2で.Net Remotingアプリケーションが実行されていました。いくつかの新しいコンポーネントを使用するために、フレームワーク4にアップグレードする必要があります。私はフレームワーク2ですべてを設定してスムーズに実行できましたが、フレームワーク4に変更すると、リモートオブジェクトの機能の1つを呼び出すときに次の例外が発生します。Framework 2から4への.Net Remotingに関する問題

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 ... 

このバグは、それがリモートオブジェクトが例外をスローし、にBinaryFormatterをオフにスローXMLで例外を、ラップIISていることに起因する、本当のバグではありません。 See this for more info on the bug

これは例外を引き起こしていることがわかりませんし、以前は一度もRemotingを使用していないため、非常に残念です。デバッグを開始する場所はあまりありません。かなりの量のロギングを行うので、コードをステップ実行する前に例外がスローされ、そのどれも起動されていないようです。

基本的に、私は同様の問題に遭遇した人からのいくつかの手がかりやポインタを探しています:

  • 何のコードがネット4には、.NET 2からコンパイル以外 を変更しなかった場合に例外を引き起こしている可能性がどのような?
  • 返される完全な例外メッセージを取得するにはどうすればよいですか?ここで

必要として、私はより多くの情報を提供することができるリモートオブジェクト

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 

を取得するコードです。

+0

.Net 4のクライアントコードもコンパイルしましたか? –

+0

はい!また、ASP.NET 4で動作するようにIISを変更しました。私はFormatter to Soapを変更することで、正確なエラーを確認することができました。私はちょうど問題を解決するために管理して、私は答えを投稿する:) – Alexandre

答えて

0

大丈夫です!

まず、エラーを確認するために、使用されているフォーマッタを変更することをお勧めします。そうすればエラー全体を見ることができます。

基本的に、私はサーバーを利用できず、IISはFormatterから投げ捨てたHTMLを送り返します。

Dim clientProvider As SoapClientFormatterSinkProvider = New SoapClientFormatterSinkProvider() 
Dim serverProvider As SoapServerFormatterSinkProvider = New SoapServerFormatterSinkProvider() 

使用できないサーバーはIISでのエラーによるものであった

<channels> 
     <channel ref="http" > 
     <serverProviders> 
      <formatter ref="soap" /> 
      </serverProviders> 
      <clientProviders> 
      <formatter ref="soap" /> 
      </clientProviders> 
     </channel> 
</channels> 

また、Web.configファイルを変更することを忘れないでください:エラーを参照するにはどのように

。エラーは、イベントビューアー(コントロールパネル - >管理ツール - >イベントビューアー)のアプリケーションの下に記録されます。

私のエラーは、ユーザーASP_NETの下でIISが実行されないようにMachine.configファイルを変更したためです。私が知りませんでしたが、各フレームワークのファイルがあるということです。 IISユーザーASP_NETを無効にしてから、単にaspnet_wp.exeプロセスを開始するユーザーはいませんでした。

ちょっとした間違い、これは一部の人が.Net Remotingをデバッグするのに役立ちます。 .NET 4で完全に動作しています!

関連する問題