2011-07-06 23 views
0

最終的に、リクエストを処理する前にリクエストを処理するwebmethodへの参照を取得しようとしています。PreRequestHandlerExecuteの中で、.asmxファイルのクラス名を確認してください

現在、プロジェクトの名前空間に要求パスを追加し、.asmx拡張子を削除し、スラッシュをドットで置き換えて作業しています。ただし、これは、クラスの名前空間階層が要求のパス階層と一致していることを前提としているため、必要な理由はありません。

ファイルを開いて解析するのに手間がかかりません - asmxファイルへのリクエストパスを指定すると、クラス内のクラスタイプまたはクラスタイプの名前への参照を取得できますか?

かなり新しい.NETになるので、私がやっていることはばかげているかもしれません。それは私のプロジェクトではありません、それはASP.NET 3.5とASMX Webサービス

EDIT

を使用するようにしてロックされています:目的はできるようにすることです。しかしいずれにせよ、私は答え:)

EDITに興味があると思いますすべてのWebメソッドに認証コードを追加することなく、特定のWebサービスが認証されていないユーザーによって実行されないようにします。私の考えは、webmethodsでカスタム属性をパブリックとしてマークすることでした。認証されていないユーザーがカスタムHTTPモジュールやハンドラを実行できるようにするだけです。ユーザーのタイプはセッションに格納されます。

答えて

1

最初に、asmxがレガシーテクノロジとみなされるため、WCF Webサービスに切り替えることをお勧めします(MSDN参照)。 WCFには、パイプラインにいくつかの拡張ポイントがあり、それはあなたの目標を満たすものです。

ここで、ハックの解決策の1つは、asmxファイル用に独自のハンドラまたはハンドラファクトリを配置してからWebServiceParser.GetCompiledTypeメソッドを使用して実際のasmxサービスタイプを取得し、属性を検査することです。 WebServiceHandlerFactory.GetHandlerを使用して実際のハンドラを作成し、要求を実行することができます。

おそらく、あなたがカスタム属性で何をしたいのかを説明して、誰かがより良い解決策を提供できるようにする必要があります。

EDIT:あなたは、それが簡単に可能性のビルトイン使用してすることができ、認可全体ASMXまたはディレクトリを確保したい場合 - 例えば:

<location path="secure.asmx"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    <deny users="?" /> 
    </authorization> 
</system.web> 
</location> 

これは、すべての認証済みユーザーへのアクセスを可能にし、匿名ユーザーに拒否する

ウェブメソッドレベルで細かいコントロールが必要な場合は、ロジック全体をヘルパーメソッドに入れることをお勧めします。たとえば、EnforceSecurity(静的メソッドまたはasmxの基本Webサービスコールのインスタンスメソッド)を呼び出すと、関連するウェブメソッド。あなたのやりたいことと多かれ少なかれ同等のもの - カスタム属性でメソッドをデコレートするのではなく、メソッド呼び出しをその中に挿入します。

+0

WebServiceParser.GetCompiledTypeをお寄せいただきありがとうございます。悲しいことに、私はあまりにもあなたを投票してくれる新しいユーザーです。元の質問を私が達成しようとしていることに関するより多くの情報で更新しました。あなたはクラスとコンテキストを与えられたWebメソッドそのものを解決する類似のものを知っていますか?それまでの間は、Request.PathInfo xor op get GETパラメータ –

+0

を使用して解決します。安全な方法と安全でない方法を別々のasmxに分けることができれば、セキュリティを適用するほうがずっと簡単になると思います。 – VinayC

+0

このアプローチの唯一の本当の利点は、EnforceSecurityメソッドを呼び出すことなくユーザーレベルのアクセスを要求するようにデフォルトの動作を設定できることです。私はもともと、デコレータコードを装飾されたメソッドの前および/または後で実行できるようにするために、Pythonのデコレータのように間違っていると仮定していたため、属性から始めました。 IISサーバーはWebファームモードで構成されていない可能性があり、ロードバランサは必ずしも同じユーザーからの連続した要求を同じIISサーバーに送信するわけではないため、組み込みの認証フレームワークは使用していません。 –

関連する問題