9

ServiceStack について質問があります。空のリクエスト クラスがあるのはなぜですか? なぜリクエスト クラスが必要なのですか? 例えば:

[Route("/test", "GET")]
public class Test
{

}

public class TestResponse
{
    public string Date { get; set; }
}

public class TestService : Service
{
    public object Get(Test test)
    {
        return new TestResponse { Date = DateTime.Now.ToString() };
    }
}

リクエストでオブジェクトを渡さない場合、サービスは失敗しますか?

それから私は私の Global.asax ファイルです、私は持っています:

public class AxDataAppHost : AppHostBase
{
    public AxDataAppHost() :
        base("AxData", typeof(TestService).Assembly)
    {
    }
}

複数のサービスがある場合、上記の例では使用していますが、 、およびのサービスTestServiceがある場合はどうなりますか? 複数のサービスを処理するにはどうすればよいですか?CustomersOrdersProducts

4

1 に答える 1

12

なぜ Request クラスが必要なのですか?

ServiceStack は、 Martin Fowler の Remote Service Best Practices (つまり、Remote Facade、DTO、および Gateway) を取り入れたメッセージベースのフレームワークであり、ServiceGateway を利用して、一般に型指定された Response DTO を返す粗粒度の Request DTO を送信します (サービスは何でも返すことができます)。メッセージベースの設計を使用することには多くの利点があり、ServiceStack の型指定されたエンド ツー エンド API を有効にします。

たとえば、サービスを定義したこれらのタイプを再利用できます。

public class Test : IReturn<TestResponse> {}

public class TestResponse
{
    public string Date { get; set; }
}

クライアントでは、code-gen を使用せずに型指定された API を提供します。たとえば、次のようになります。

var client = new JsonServiceClient(BaseUri);
TestResponse response = client.Get(new Test());

注: デフォルトでは、ServiceStack の C# クライアントは事前定義されたルート(デフォルトで有効)を使用するようにフォールバックするため、カスタム ルートは必要ありません。

複数のサービスがある場合、上記の例では TestService を使用していますが、Customers、Orders、および Products に 1 つある場合はどうなりますか? 複数のサービスを処理するにはどうすればよいですか?

AppHost ベース コンストラクターでは、アセンブリを渡します(つまり、単一のサービスではありません)。

public AxDataAppHost() : base("AxData", typeof(TestService).Assembly) {}

これにより、ServiceStack は、すべてのサービスを探して接続する場所を知ることができます。これは、サービスが含まれる dll/アセンブリごとに 1 回だけ行う必要があります。

ServiceStack の AppHosts を使用すると、複数のアセンブリにあるサービスを接続するために使用できる複数のアセンブリを指定することもできます。

public AxDataAppHost() 
  : base("AxData", typeof(TestService).Assembly, typeof(ServiceInNewDll).Assembly) {}
于 2013-01-22T18:47:55.567 に答える