7

IIS6でServiceStackをHTTPSで動作させるのに問題があり、これを設定するためのドキュメントが見つからないようです。現在、私はそのようなエンドポイント設定を持っています-http://example.com/api.ashxこれを参照すると、 http://example.com/api.ashx/metadataで利用可能なAPIを説明する便利なServiceStack生成ページが表示されます。https://example.com/api.ashx(httpsに注意)を参照すると、代わりにこのエラーメッセージが表示されます-

'/'アプリケーションのサーバーエラー。リソースが見つかりません。説明:HTTP404。探しているリソース(またはその依存関係の1つ)が削除されたか、名前が変更されたか、一時的に使用できなくなった可能性があります。次のURLを確認し、スペルが正しいことを確認してください。要求されたURL:/api.ashx

web.configに次の設定があります(ここの例のように-http ://www.servicestack.net/ServiceStack.Hello/)-

<!-- ServiceStack: Required to host at: /api.ashx -->
    <location path="api.ashx">
        <system.web>
            <httpHandlers>
                <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
            </httpHandlers>
        </system.web>

ローカルのWindows7ボックスでIIS7を実行していますが、正常に動作しますが、テスト環境とライブ環境ではまだIIS6を使用しており、そこで動作させることができません。

httpsを使用すると、他の通常のaspxページが正常に機能します。

私に正しい方向へのプッシュを与えることができる人に感謝します!

4

2 に答える 2

9

IIS 6の問題は、IIS 6.0要求パイプラインがASP.NET拡張子のないパスを認識しないことです。たとえば、.aspxがASP.NETisapiハンドラーに渡されません。したがって、これを実現するには、IIS6でServiceStackを実行できるようにするための一般的な2つのオプションがあります。

  1. Web.Configのservicestackパスを「*」から「servicestack.ashx」に変更します

    <system.web>

    <httpHandlers> <add path = "servicestack.ashx" type = "ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory、ServiceStack" verb = "*" /> </ httpHandlers>

    </system.web>

  2. 仮想ディレクトリのワイルドカードマッピングを追加して、未処理のすべての要求をASP.NETに渡します。IIS6.0でワイルドカードスクリプトマップを作成するには、次の手順に従います。

    1. Webサイトを右クリックして、[プロパティ]を選択します
    2. [ホームディレクトリ]タブを選択します
    3. [構成]ボタンをクリックします
    4. [マッピング]タブを選択します
    5. [挿入]ボタンをクリックします(図4を参照)。
    6. aspnet_isapi.dllへのパスを[実行可能ファイル]フィールドに貼り付けます(このパスは、.aspxファイルのスクリプトマップからコピーできます)。
    7. [ファイルが存在することを確認する]というラベルの付いたチェックボックスをオフにします
    8. [OK]ボタンをクリックします

IIS6.0ワイルドカードマッピング

于 2012-04-04T06:06:05.080 に答える
1

神話の答えは私にはうまくいきませんでした。

servicestack構成でweb.configにロケーションタグを追加することで機能しました。servicestackがpath="*"で機能することがわかりましたが、多くのリクエスト(Episerver)を処理しましたが、次のように解決しました。

<location path="UniqueTag">
    <system.web>
        <httpHandlers>
            <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
        </httpHandlers>
    </system.web>
</location>

次に、すべてのルートの前にUniqueTagを付けます。

[Route("/UniqueTag/DeletePost/{Id}", Verbs = "POST")]

ただし、mythzの回答のオプション2も必要になる可能性があることに注意してください。これは、ソリューションのデフォルト設定であるためです。

于 2014-02-14T07:26:53.883 に答える