0

httpHandler パス プロパティの使用方法に関するルールの適切なリソースはありますか?

ハンドラーがさまざまな環境で呼び出されたときの結果がまちまちなので、説明させてください...

次のような URL を許可したい:

http://mysite/_layouts/myCompany/rest/myservice.svc/param1/param2

「myCompany」フォルダー/リンクの下でのみハンドラーを呼び出したいので、アプリケーションの残りの部分に影響を与えないように、次の web.config ファイルを対応するフォルダーに配置します。これは一部のマシンでは機能しますが、他のマシンでは機能しません。

<configuration>
    <system.web>
        <httpHandlers>
            <add verb="*" path="myservice.svc" type="..." validate="false"/>
        </httpHandlers>
    </system.web>
</configuration>

さて、基本的に「rest/myservice.svc/param1/param2」相対パスから「myservice.svc」を見つける必要があったため、これが機能したことに少し驚いたことを認めなければなりませんが、見つかりましたそれ - しかし、私の 3 台のテスト マシンのうちの 2 台でのみです。そこで、失敗したマシンで次のことを試しました。

<add verb"*" path="rest/myservice.svc/*/*" type="..." validate="false"/>

これは数回機能しましたが、現在は機能していません。論理的なタイプであるため、少し注意を払ってもこれを説明できないのは本当に気になりますが、再び機能させることができませんでした。この同様のスタック オーバーフローの質問も参照してください。

以下は機能しますが、理想的ではないパラメーターを提供するためにクエリ文字列変数に頼らざるを得ないことに注意してください。

<add verb"*" path="rest/myservice.svc/*" type="..." validate="false"/>

途中で、2 台のマシンで親の web.config ファイルを調べて、結果が異なり、httpHandlers がどのように定義されているかを確認しましたが、問題は何もありませんでした。

ですから、このパスがどのように利用されているかを理解したいと思っています。

価値があるのは、これはSharePointサイトで実行されているため(したがって、この質問の「sharepoint」タグ)、これを使用してSOAPの代わりにREST(単純な「text/xml」)を提供することです。私は完全な WCF を使用したくありません。これは、SharePoint のインストールが多すぎるため、ボートを揺るがすため、代わりに HTTP ハンドラーを使用しています。

さらに、私が得ているエラーは次のとおりです。

virtualPath   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result) 
   at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) 
   at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) 
   at System.ServiceModel.Activation.HttpHandler.ProcessRequest(HttpContext context) 
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
4

1 に答える 1

0

答えはまだ歓迎されていますが、ここで簡単な回避策を見つけました。シンプルすぎて今まで思いつかなかったのが気になる…

特定の時点からフォルダー/URL を所有しているため、すべてがハンドラーを通過することを確認できます。

<add verb"*" path="*" type="..." validate="false"/>

どれだけ簡単にできますか :-S.

これの副次的な利点は、不適切な URL のエラーをより適切に報告できることです。ハンドラーの代わりにハンドラー ファクトリを使用する場合があります。その場合、唯一の変更は指定されたタイプです。

于 2009-06-05T21:01:59.800 に答える