techbank.jp コミュニティ

     あれ?どうやるんだっけ?を解決する
ようこそ techbank.jp コミュニティ ログイン | ID登録 | ヘルプ
検索

ISAPIフィルターで環境変数を設定する方法について‏

最終更新日 2009/8/28 16:20 by zero4649. 4 投稿.
Page 1 of 1 (5 items)
記事の並び替え: 前のトピック 次へ
  • 2009/8/28 12:27

    • zero4649
    • Top 50 Contributor
    • Joined on 2009/8/27
    • 訪問者級
    • ポイント 0

    ISAPIフィルターで環境変数を設定する方法について‏

    はじめまして、ゼロと申します。

    ISAPIフィルターで環境変数を追加する方法を教えて頂けないでしょうか。

    SF_NOTIFY_PREPROC_HEADERSの処理で次のようにして環境変数を設定しているのですがASPで環境変数を確認したところ設定した内容が反映されていません。


    よろしくお願いします。
     
    [SF_NOTIFY_PREPROC_HEADERS処理]
     SetEnvironmentVariable(envname,"bbb");
     GetEnvironmentVariable(envname,env,sizeof(env));
     LogPut("%s = %s\n",envname,env);
    [ASP]
    <%@ Language = "VBScript" %>
    <%
    Option Explicit
    Dim sServername, sServerinst, sPhyspath, sServerVersion
    Dim sServerIP, sRemoteIP
    Response.Buffer = True
    sServername = LCase(Request.ServerVariables("SERVER_NAME"))
    sServerinst = Request.ServerVariables("INSTANCE_ID")
    sPhyspath = LCase(Request.ServerVariables("APPL_PHYSICAL_PATH"))
    sServerVersion = LCase(Request.ServerVariables("SERVER_SOFTWARE"))
    sServerIP = LCase(Request.ServerVariables("LOCAL_ADDR"))
    sRemoteIP =  LCase(Request.ServerVariables("REMOTE_ADDR"))
    %>
    <html>
    <head>
    <title>ASPテスト</title>
    </head>
    <body>
    <h2>ASPテスト</h2>
    <table>
      <tr>
        <td>Servername</td>
        <td><%=sServername%></td>
      </tr>
      <tr>
        <td>Serverinst</td>
        <td><%=sServerinst%></td>
      </tr>
      <tr>
        <td>Physpath</td>
        <td><%=sPhyspath%></td>
      </tr>
      <tr>
        <td>ServerVersion</td>
        <td><%=sServerVersion%></td>
      </tr>
      <tr>
        <td>ServerIP</td>
        <td><%=sServerIP%></td>
      </tr>
      <tr>
        <td>RemoteIP</td>
        <td><%=sRemoteIP%></td>
      </tr>
    </table>
    <br>
    <%
    Dim name
    For Each name In Request.ServerVariables
        Response.Write name & " = " & Request.ServerVariables(name) & "<br>" & "<br>"
    Next
    %>
    </body>
    </html>
     

    • 投稿ポイント: 0
  • 2009/8/28 14:10 返信先

    • けろ-みお
    • Top 10 Contributor
      女性
    • Joined on 2008/12/18
    • techbank.jp 管理人
    • 責任者級
    • ポイント 0
    • Bloggers
      Moderator
      MVP
      techbank

    Re: ISAPIフィルターで環境変数を設定する方法について‏

    環境変数の意味を勘違いされてますね。

    ■ISAPI側の「SetEnvironmentVariable」はプラットフォームSDK用のAPI、すなわちWindows OSに定義されている環境変数を設定するときに使用するものです。

     (例:PATHとか、TEMP等)

    ■ASP側の「Request.ServerVariables」は、HTTPやWebサーバー(IIS)固有の環境変数を取得する時に使用するものです。

     (例:SERVER_NAME、REMOTE_ADDR等)

     

    なので、そもそも「環境変数」の意味が違う(というか参照している場所が物理的に違う)、

    いくらISAPI側で、「SetEnvironmentVariable」しても

    ASP側でその環境変数を取得することはできません。

     

    という前提をいれた上で、どこに環境変数を設定し、取得したいのでしょうか?

    というのをまずは整理してから、ご質問下さい。 

    1.Webサーバー上に登録されているWindows OSの環境変数を設定&取得したいのか?

    2.Webサーバー固有(IIS)で参照される環境変数を設定&取得したいのか?

     

    恐らく私の想像だと、2.なのかなと思いますが、もし、2.であれば、

    HttpFilterContextのメソッドに、AddResponseHeadersというメソッドがあるので、

    そいつを使えば、できたと思います。(SF_NOTIFY_PREPROC_HEADERSのタイミングでいけると思います)

    DWORD MyClass::OnPreprocHeaders(CHttpFilterContext *pfc,
                                    PHTTP_FILTER_PREPROC_HEADERS pHeaders)
    { 
        char env_value[1024];
        long env_value_len = 1024;
     
        pHeaders->AddHeader( pfc->m_pFC, "envname:", "bbb" );
        pHeaders->GetHeader( pfc->m_pFC, "envname:", env_value, &env_value_len);
    }

     

    動作確認していないので、これでいけるのか保障はありませんが、もし動かないとかあれば、またご相談ください。

    分類: , ,
    • 投稿ポイント: 0
  • 2009/8/28 14:30 返信先

    • zero4649
    • Top 50 Contributor
    • Joined on 2009/8/27
    • 訪問者級
    • ポイント 0

    Re: ISAPIフィルターで環境変数を設定する方法について‏

    ご回答ありがとうございます。 確かに勘違いしておりました。 ご指摘の通り、2をやりたかったのです。 教えて頂いた方法ならやりたかったことが実現できそうです。 しかしちょっと困ったことがあります。 実は今のところ教えて頂いた方法を実装できる状態にありません。 資料が少ないのでhttp://techbank.jp/Community/blogs/mymio/archive/2008/11/09/3138.aspxを参考にさせて頂いて見よう見真似で作ってみたものの、Visual Studio 2005のVC++でMFCを使って作ることができず、まだMicrosoft Platform SDK for Windows Server 2003 R2のUpCaseサンプルを改造することしかできていません。 UpCaseサンプルはMFCを使用していない(C言語で作成されている)ため、せっかく教えて頂いた方法を実装できないのです。 HPでご紹介されているISAPIフィルターのプロジェクトをダウンロード可能にして頂く訳にはいかないでしょうか?
    • 投稿ポイント: 0
  • 2009/8/28 15:51 返信先

    • けろ-みお
    • Top 10 Contributor
      女性
    • Joined on 2008/12/18
    • techbank.jp 管理人
    • 責任者級
    • ポイント 0
    • Bloggers
      Moderator
      MVP
      techbank

    Re: ISAPIフィルターで環境変数を設定する方法について‏

    MFCを利用していても、MFCを利用しなくても、メソッドのプロトタイプ自体は大きな相違はないため、

    少し頭を使って、カスタマイズする感覚で作りこんでいけば、非MFCタイプでも対応できるはずですが・・・

    あくまでサンプルの一例(ロジックイメージ)としてヒントを提示したまでですので、そこから先、

    どのように実装するかは提示したサンプルを元に検討頂きたいところです。

    (そのままコピペで動く答えを求めていらっしゃるなら、大間違いです。

    提示したサンプルの応用で非MFC版のものをご自身で考えて実装してください。)

     

    また、正確な回答を得たいのであれば、ISAPI側のソースをもっと細かく、ご提示頂かないと回答できません。

    (本来であれば、質問時にその旨を伝えるべきです。)

     

    そして、MFC対応版のVisual Studio 2005用のISAPIプロジェクトは簡単に作れません。詳しくは、

    http://techbank.jp/Community/blogs/mymio/archive/2009/07/21/10310.aspx

    をご覧ください。

    宜しくお願いします。

    • 投稿ポイント: 0
  • 2009/8/28 16:20 返信先

    • zero4649
    • Top 50 Contributor
    • Joined on 2009/8/27
    • 訪問者級
    • ポイント 0

    Re: ISAPIフィルターで環境変数を設定する方法について‏

    教えて頂いたURLで勉強してみます。 ありがとうございました。
    • 投稿ポイント: 0
Page 1 of 1 (5 items)
掲示板の人気度
フィードメーター - techbank.jpコミュニティ
Blog全体の人気度
フィードメーター - techbank.jpコミュニティ
スカウター : techbank.jp Powered by PR-Icon