none
ASP.NETのコードで、NamedPipeクライアントを実装し、同一PC上のLoginユーザでNamedPipeサーバと通信ができません RRS feed

  • 質問

  • WindowsPCで、PC外からメッセージを受信したことを通知するプログラムを作成しています。

    外部からのメッセージは、IISでHTTPで受信し、ASP.NETの処理でLOGINユーザへ通知する仕組みで作成しました。ASP.NETとLOGINユーザのメッセージ通知処理は、NamedPIPEを使用しています。

    そこで、VS2008でDebug用に実行されるIISと、LOGINユーザのメッセージ表示プログラムでは、問題なく動作したのですが、実際のIISに移行すると、ASP.NETからLOGINユーザへのNamedPIPEのコネクションがOpenできません。

    同じPCで動作させているので、\\.\pipe\XXXX で到達可能だと思うのですが、ユーザが異なるための問題なのでしょうか?

    このASP.NETのコードを実行するユーザをLOGINユーザと同じすると、うまくいけるのかもしれませんが、それはIISのどこの設定を変更すれば、ASP.NET実行ユーザを変更できるでしょうか?

    ご存じの方がおられましたら、教えてください。


    Reiji Tanaka
    2010年9月2日 5:29

回答

  • Reiji様

    はじめまして。

    早速ですが、下記との事ですが、おそらく実行ユーザの権限が異なる為だと思います。

    ------ 記 -------
    VS2008でDebug用・・OK
    IIS・・NG
    ---------------

    IIS6であれば、ユーザとして"NT AUTHORITY\NETWORK SERVICE" (Users権限)が使用されます。
    VS2008でDEbug時は、特に指定していないのであれば、Windowsログオンユーザ(おそらくAdministrator権限)で実行されているでしょう。

    ※確認としては、"System.Security.Principal.WindowsIdentity.GetCurrent().Name"プロパティにてログ出力するなり、画面に出力するなどしてください。

    ASP.NET実行ユーザを変更するには、以下で偽装可能です。
    ASP.NETプロジェクト内のWeb.configの<system.web>タグ内に以下追加します。
    <identity impersonate="true" userName="ユーザ名" password="パスワード" />
    ※ユーザ名にVS2008でDebugした際のPCのログイン名、パスワードにPCのパスワードを入力後、保存すれば、対象ユーザで実行可能です。

    ただし、指定したユーザで実行されますので、セキュリティは十分考慮する必要があります。
    実運用というより、問題の切り分けとして書き込みしております。

    何かの参考になれば幸いです。


    MCITP(Database Developer/Database Administrator) MCPD(Web Developer/Windows Developer) MCTS(Distributed Applications)
    • 回答としてマーク Reiji 2010年9月2日 11:14
    2010年9月2日 9:27

すべての返信

  • Reiji様

    はじめまして。

    早速ですが、下記との事ですが、おそらく実行ユーザの権限が異なる為だと思います。

    ------ 記 -------
    VS2008でDebug用・・OK
    IIS・・NG
    ---------------

    IIS6であれば、ユーザとして"NT AUTHORITY\NETWORK SERVICE" (Users権限)が使用されます。
    VS2008でDEbug時は、特に指定していないのであれば、Windowsログオンユーザ(おそらくAdministrator権限)で実行されているでしょう。

    ※確認としては、"System.Security.Principal.WindowsIdentity.GetCurrent().Name"プロパティにてログ出力するなり、画面に出力するなどしてください。

    ASP.NET実行ユーザを変更するには、以下で偽装可能です。
    ASP.NETプロジェクト内のWeb.configの<system.web>タグ内に以下追加します。
    <identity impersonate="true" userName="ユーザ名" password="パスワード" />
    ※ユーザ名にVS2008でDebugした際のPCのログイン名、パスワードにPCのパスワードを入力後、保存すれば、対象ユーザで実行可能です。

    ただし、指定したユーザで実行されますので、セキュリティは十分考慮する必要があります。
    実運用というより、問題の切り分けとして書き込みしております。

    何かの参考になれば幸いです。


    MCITP(Database Developer/Database Administrator) MCPD(Web Developer/Windows Developer) MCTS(Distributed Applications)
    • 回答としてマーク Reiji 2010年9月2日 11:14
    2010年9月2日 9:27
  • ノブヒデ さん

    ご助言ありがとうございます。

    この方法でうまくできました。公開サーバとかではなく、内部の実験なので、セキュリティは問題ありません。

    助かりました。

     


    Reiji Tanaka
    2010年9月2日 11:15