1

ServiceStack と、RiaServices を ServiceStack ベースのアプローチに置き換える可能性について調べ始めています。とにかく、ビューごとに 1 つの Dto を既に使用しており、バックエンドで NH を使用しています。アプリケーションのルート (Silverlight) の代わりに「api」を指す要素を追加して webconfig を変更し、サービスを作成し、ルートを定義しました。操作をクリックすると、操作「api/certificates」に利用可能なルートが表示されます。Firefox 用のレスト クライアント プラグインを使用すると、ヒットhttp://localhost:12543/api/json/reply/CertificateDefinitionList して期待どおりのデータを取得できます。しかし、http://localhost:12543/api/certificatesそうすると404エラーが発生し、フィドラーでは「リクエストのハンドラーが見つかりません」と表示されます。私は何が欠けていますか?

HTTP/1.1 404 Not Found
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 21 Mar 2013 19:44:07 GMT
X-AspNet-Version: 4.0.30319
X-Powered-By: ServiceStack/3.942 Win32NT/.NET
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Content-Length: 1316
Connection: Close

Handler for Request not found: 


Request.ApplicationPath: /
Request.CurrentExecutionFilePath: /api/certificates
Request.FilePath: /api/certificates
Request.HttpMethod: GET

Web.config 内

  <!-- service stack hosting at custom path-->
  <location path="api">
    <system.web>
      <httpHandlers>
        <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
      </httpHandlers>
    </system.web>
    <!-- Required for IIS 7.0 -->
    <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>

Global.asax

public override void Configure(Funq.Container container)
{
   //this is because ria entry for system.webserver makes it not work for 
   // service stack
   SetConfig(new EndpointHostConfig
   {
      ServiceStackHandlerFactoryPath = "api",
   });

   container.RegisterAutoWired<ComplianceService>();

   Routes.Add<CertificateDefinitionList>("/api/certificates");
}
4

1 に答える 1

1

@mythzが尋ねたように、ルートについてもう少し詳しく説明していただければ助かります。

参照するhttp://localhost:12543/api/certificatesには、次のようなリクエスト クラスを作成します。

[Route("/certificates")] //**this assumes you have a web.config with 'api' as custom path
public class Certificate
{
  public string FieldOne {get; set;}
}

ここで説明されている Fluent API を使用することもできます

操作をクリックすると、操作「api/certificates」に利用可能なルートが表示されます...しかし、そうするとhttp://localhost:12543/api/certificates404エラーが発生します

ページに「GET api/certificates」と表示され'json/metadata?op=Certificate'ている場合は、[Route("/api/certificates")]. パス/URL の「api」部分は web.config で既に構成されているため、ルートに「api」を含める必要はありません。

**web.config でこれを行ったように思えますが、参照用に b) /custompath でのサービスのホストの下を参照してください。

<system.web>
  <httpHandlers>
    <add path="api*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/>
  </httpHandlers>
</system.web>
于 2013-03-22T06:46:01.230 に答える