2017-01-23 37 views
1

リソースを処理するハンドラを作成していますが、実装されたIHttpHandlerクラスが名前空間の下に記述されているときに問題が発生しています。Ashxハンドラのprocessrequest関数が呼び出されていません

のWeb.configシナリオに動作しないコード

を見つけてください:

<add name="ResourceHandler" type="PublicSite.Classes.Handlers.ResourceEndpoint, PublicSite" path="Resource.ashx" verb="*" /> 

プロパティ:PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=False

問題:コンストラクタがヒットして、のprocessRequestが呼び出されていません。クラスのオブジェクトを構築します。つまり、コンストラクタがヒットしますが、processrequestが呼び出される前に404で失敗します。

ワーキングシナリオ

のWeb.config:

<add name="ResourceHandler" type="ResourceEndpoint,PublicSite" path="Resource.ashx" verb="*" /> 

クラス:PublicSite.Classes.Handlers.ResourceEndpoint.IsReusable=TrueコンストラクタはヒットとのprocessRequestが呼び出される前に、404で失敗している

ハンドラを要求する2度目は、直ちに構築オブジェクトを使用するので、construcotrは呼び出されず、ProcessRequestが直接呼び出されます。ところで、2番目の呼び出しでは、ハンドラが動作しています。

私は再利用可能なプロパティを必要としません。 問題を見つけるのに役立つ人がいますか?ありがとう。

+0

実際の.ashxファイルを使用していますか、それをWeb設定に登録していますか? –

+0

ハンドラがネームスペースに入っていても、ネームスペースなしのクラス名だけが設定ラインに必要な場合がありますか? –

+0

どのバージョンのIISを使用していますか? 6以下ではの下にハンドラを登録する必要がありますが、7以上の場合はweb.configのセクションにあります – sh1rts

答えて

1

あなたのweb.configとハンドラ自体は次のように見えますか?

<system.webServer> 
    <handlers> 
     <add name="customerHandler" 
      preCondition="integratedMode" 
      verb="*" 
      path="customerHandler.ashx" 
      type="GlassCMS.HttpHandlers.CustomerHandler, GlassCMS"/> 
. 
. 
. 
    </handlers> 
    </system.webServer> 

のHttpHandler: - - :

web.configファイル(これは、IIS 7.5の下でホストされているプロジェクトからです)(私もしたい場合はJavaScriptを含めることができ

[WebService(Namespace = "http://{redacted.com}/json-http-handlers/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    public class CustomerHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get { return false; } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      string json = string.Empty; 

      // code to do whatever here... 

      context.Response.Write(json); 
     } 

ますかここにあなたの投稿することができます)。上の例は作業コードのものです。

+0

ありがとうthats働いています。 –

関連する問題