1

たとえば、開発中のクールなURI(SS v3.9.64、Visual Studio 2012、Framework 3.5)でうまく機能しています:

Routes.Add<Bark>("/bark.ashx/{dogname}", "GET");

しかし、デプロイすると、クエリ文字列で動作するようになります。次のような URL を使用すると、「Handler for Request not found」が表示されます。

http://localhost:51781/IrpfWebApi/bark.ashx/sprocket

プロジェクトをローカルに発行し、Visual Studio 2012 から実行するだけで、この問題を再現できます (同じサーバーであると想定されています)。

いくつかの場所で説明されているように、W2003 / IIS6 で動作できるようにするために、.ashx 拡張子を使用します。

4

1 に答える 1

2

.ashxIIS 6 に必要な拡張機能は、ルートではなくハンドラー パスの一部であると想定されています。

  <!-- 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>

    <!-- Required for IIS7 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
      </handlers>
    </system.webServer>
  </location>
  <!-- Required for MONO -->
  <system.web>
    <httpHandlers>
      <add path="api.ashx*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
    </httpHandlers>
  </system.web>
  <!-- Required for IIS7 -->
  <system.webServer>
    <!-- ServiceStack: Required -->
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>

次に、ルート登録は次のようになります。

Routes.Add<Bark>("/bark/{dogname}", "GET");
于 2013-10-23T18:29:43.233 に答える