トップ回答者
CGI上でのGetAllNetworkInterfaces()でエラー

質問
-
こんにちは。
CGIをC#で記述しています。
このプログラムでマックアドレスを取得するためGetAllNetworkInterfaces()を実行しているのですが、エラーが発生してしまします。
デバック時やCGIとしてではない動作時は正常なのですが、CGIとして実行するとエラーとなるのが不明です。
エラー回避方法分かる方いればご教授いただけると助かります。
環境: VS C# 2010, CGI実行サーバー: IIS7.5
static void Main(string[] args) { Console.WriteLine("Content-type:text/html; charset=Shift_JIS"); Console.WriteLine(""); Console.WriteLine("CGI自体は動作する"); // 下記でエラー NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); //Mac アドレス習得やその他の処理が続く }
長いですがエラー内容も張ります。
ハンドルされていない例外: System.TypeInitializationException: 'System.Net.ComNetOS' のタイプ初期化子が例外をスローしました。 ---> System.Configuration.ConfigurationErrorsException: 構成システムを初期化できませんでした。 ---> System.ArgumentException: パスに無効な文字が含まれています。場所 System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String[] str)場所 System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)場所 System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path)場所 System.AppDomainSetup.VerifyDir(String dir, Boolean normalize)場所 System.AppDomainSetup.get_ConfigurationFile()場所 System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)場所 System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)場所 System.Configuration.ClientConfigurationHost.GetStreamName(String configPath)場所 System.Configuration.ClientConfigurationHost.get_IsAppConfigHttp()場所 System.Configuration.ClientConfigurationSystem..ctor()場所 System.Configuration.ConfigurationManager.EnsureConfigurationSystem()--- 内部例外スタック トレースの終わり ---場所 System.Configuration.ConfigurationManager.EnsureConfigurationSystem()場所 System.Configuration.ConfigurationManager.PrepareConfigSystem()場所 System.Configuration.ConfigurationManager.GetSection(String sectionName)場所 System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)場所 System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()場所 System.Diagnostics.DiagnosticsConfiguration.Initialize()場所 System.Diagnostics.DiagnosticsConfiguration.get_Sources()場所 System.Diagnostics.TraceSource.Initialize()場所 System.Net.Logging.InitializeLogging()場所 System.Net.Logging.get_On()場所 System.Net.ComNetOS..cctor()--- 内部例外スタック トレースの終わり ---場所 System.Net.NetworkInformation.SystemNetworkInterface.GetNetworkInterfaces(AddressFamily family)場所 System.Net.NetworkInformation.SystemNetworkInterface.GetNetworkInterfaces()場所 System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()場所 GetMacAddress.Program.Main(String[] args)
- 編集済み tapioca54 2012年4月6日 7:18
回答
-
CGI の URL に変な文字が入っていると、例外が発生する問題が昔からあるようですね。
検索していると同じようなスタックトレースのある例外が見つかり、レジストリで設定変更することで、URL の検証を抑制できるようなことが書いていました。
KB 自体は .NET 1.1 時代のものですが、今も有効であると文中に書かれているところまではみています。
http://www.christophercrooker.com/use-any-characters-you-want-in-your-urls-with-aspnet-4-and-iis上述のようなレジストリ変更ができない場合、URL にファイルパスとして使えない文字が含まれていないかを見直し、URL を変えれば回避できるかもしれません。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
- 回答としてマーク 山本春海 2012年5月1日 7:34
すべての返信
-
CGI の URL に変な文字が入っていると、例外が発生する問題が昔からあるようですね。
検索していると同じようなスタックトレースのある例外が見つかり、レジストリで設定変更することで、URL の検証を抑制できるようなことが書いていました。
KB 自体は .NET 1.1 時代のものですが、今も有効であると文中に書かれているところまではみています。
http://www.christophercrooker.com/use-any-characters-you-want-in-your-urls-with-aspnet-4-and-iis上述のようなレジストリ変更ができない場合、URL にファイルパスとして使えない文字が含まれていないかを見直し、URL を変えれば回避できるかもしれません。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
- 回答としてマーク 山本春海 2012年5月1日 7:34
-
こんにちは、tapioca54 さん。
MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
その後いかがでしょうか。Azulean さんからの情報は確認されましたか?
参考になる情報をいただいているように思われましたので、勝手ながら私の方で一旦回答としてマークさせていただきました。
Azulean さん、情報ありがとうございます。
例外メッセージと、CGI というキーワードで検索してみましたところ、以下のような技術情報もありましたので、ご参考まで。
#関係なかったらごめんなさい。
Error message when a CGI program that is written by using the .NET Framework 2 makes Web service calls: "System.ArgumentException: Illegal characters in path"
http://support.microsoft.com/kb/922780/en-us以下は、上記技術情報の IIS 7.0 用の設定です。
スクリプト マップのハンドラー マッピングを追加する (IIS 7)
http://technet.microsoft.com/ja-jp/library/cc754147(v=ws.10).aspx
_________________________________________
日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海