2

環境: Windows Server 2012、IIS8、.Net 4 Web アプリケーション。http://site.com/srv.asmx/getSomething のように Web サービス (AJAX 呼び出し) を呼び出すと、要求はhttp://site.com/srv.asmx/getSomething/Default にリダイレクト (302) されます。 aspx getSomething メソッドを呼び出す代わりに。

誰もこれを見たことがありますか?IIS (またはフレームワーク?) は、これが *.asmx の要求であることを認識せず、既定のドキュメントを追加するだけのようです。

私が得ている正確なエラーメッセージ:

http://site.com/filenotfound.htm?aspxerrorpath=/srv.asmx/getSomething/default.aspx エラー 404: ファイルまたはページが見つかりません

ありがとうございました!

--- 更新 --- 自分で解決策を見つけました

- - 解決 - -

この動作は、拡張子のない Url ハンドラーが原因で発生します。この KB 記事は私を大いに助けてくれました: http://support.microsoft.com/kb/2520479

パッチをインストールしようとはしていません (おそらくそれが最も簡単な解決策です)。ハンドラーを再配置しました。

影響を受けたサイトの applicationHost.config (C:\Windows\System32\inetsrv\config にあります) には、次の内容がありました。

<location path="site.com">
    <system.webServer>
        <handlers>
            <clear />
            <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
            <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
            <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />

--- スキップ ---

ご覧のとおり、ExtensionlessUrl ハンドラー (そのうちの 1 つ) が上部にリストされています。これは、リクエストを処理する機会を得た最初のものであることを意味します。したがって、「拡張機能のない」Web サービス呼び出しを喜んで消費します。

*.asmx ハンドラーも下にありましたが、呼び出される機会がありませんでした。

そこで、これを修正するために、拡張子のない URL ハンドラーを下から 2 番目の位置 (静的ファイル ハンドラーの直前) に移動しました。

    <system.webServer>
        <handlers>
            <clear />
            <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />

--- スキップ ---

これでこの問題は解決しました。

4

2 に答える 2

2

FormAuthenticationこれが、ログインせずにサービスを使用してアクセスしようとして いる理由である可能性があります。
その状態でロケーションパスを使用できます

  <location path="srv.asmx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
于 2013-03-25T10:03:34.783 に答える