none
CGI上でのGetAllNetworkInterfaces()でエラー RRS feed

  • 質問

  • こんにちは。

    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
    2012年4月6日 7:16

回答

  • 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
    2012年4月7日 0:19
    モデレータ

すべての返信

  • 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
    2012年4月7日 0:19
    モデレータ
  • こんにちは、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
    _________________________________________
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2012年5月1日 7:34