0

MSDN http://msdn.microsoft.com/en-us/library/system.net.ipaddress.tryparse(v=vs.100).aspxによると、ipString に Unicode 文字を含めることはできません。そうしないと、ArgumentException がスローされます。

誰でもローカル コンソール アプリで再現できますか?複数の Unicode 文字を試しましたが、再現できませんでした。

一部のサーバー ログで同様のエラーが発生しました。

マーシャリングできません: マップできない文字が見つかりました。しかし、どの入力がコードを壊したかをログに記録できませんでした。

更新、スタック トレースの一部: System.ArgumentExceptionMessage0: マーシャリングできません: マップできない文字が見つかりました。; System.String.ConvertToAnsi(Int32 iMaxDBCSCharByteSize、ブール値 fBestFit、ブール値 fThrowOnUnmappableChar、Int32& cbLength)-- System.StubHelpers.CSTRMarshaler.ConvertToNative(Int32 フラグ、文字列 strManaged、IntPtr pNativeBuffer)-- System.Net.UnsafeNclNativeMethods.OSSOCK で。 WSAStringToAddress(String addressString, AddressFamily addressFamily, IntPtr lpProtocolInfo, Byte[] socketAddress, Int32& socketAddressSize)-- System.Net.IPAddress.InternalParse(String ipString, Boolean tryParse)-- System.Net.IPAddress.TryParse(String ipString, IPアドレス&アドレス)--

4

1 に答える 1

0

MSDN のコメントはやや奇妙です (どの文字も1Unicode 文字であるため) ... 一般に、入力が無効なテキストの場合、TryParse はスローされません。

あなたのエラーはマーシャリングに関連しているようです(「マネージドコードからCOMオブジェクトを呼び出す」または「ネイティブコードをPInvokeする」など)。エラーが原因であると確信している場合TryParse、最も簡単な方法はTryParse、System.Dll の実際の実装を調べて、どの入力とどの環境でそのような例外が発生する可能性があるかを追跡することです。

考えられるケースは次のとおりです (ロシア文字を使用した IPv6 のようなアドレス):

  System.Net.IPAddress.TryParse("ф:ф", out v);
于 2013-04-02T05:49:20.600 に答える