此处:Recommended ServiceStack API Structure和此处:https://github.com/ServiceStack/ServiceStack/wiki/Physical-project-structure是有关如何为C#客户端构建项目以重用DTO的建议。
显然,这是通过包含DTO程序集的dll来完成的。我在网上搜索了一个例子,就是Hello World在ServiceStack中为C#客户端使用单独的程序集DTO。也许我应该能够自己解决这个问题,但到目前为止还没有证明这很容易。
几乎所有客户端描述都适用于通用和非类型JSON或其他非基于DTO的客户端。似乎没有人对像我这样的类型化C#客户端感兴趣(甚至我找到的ServiceStack文档)。所以我认为这是一个很好的问题,即使我最终弄明白了。
要清楚,我已构建并运行Hello World示例服务器。我还使用浏览器连接到服务器并与之交互。我还创建了一个可以调用
的客户端空项目 JsonServiceClient client = new JsonServiceClient(myURL);
然后我尝试复制我的DTO定义,没有汇编DLL,因为我没有。我得到ResponseStatus
未定义。
显然有些东西缺失(似乎在ServiceStack.Interfaces.dll
中定义),如果我可以创建DTO的dll,我认为它将解决所有引用。
任何人都可以深入了解如何为简单的Hello World创建DTO程序集吗?
编辑添加代码:
using ServiceStack.ServiceClient.Web;
namespace TestServiceStack
{
class HelloClient
{ public class HelloResponse
{
public string Result { get; set; }
public ResponseStatus ResponseStatus { get; set; } //Where Exceptions get auto-serialized
}
//Request DTO
public class Hello
{
public string Name { get; set; }
}
HelloResponse response = client.Get(new Hello { Name = "World!" });
}
}
其中ResponceStatus未定义。
答案 0 :(得分:0)
我能够通过添加:
找到缺失的符号ResponseStatususing ServiceStack.ServiceInterface.ServiceModel;
这是构建的完整代码。请记住,我在此过程中发现了其他内容。一旦构建它然后失败,因为我在.NET 3.5环境中使用.NET 4.0环境中的DTO。但这是一个无关的问题。另请注意,此测试代码对响应没有任何作用,它只是使构建工作的一个示例。
using ServiceStack.ServiceClient;
using ServiceStack.ServiceInterface;
using ServiceStack.Text;
using ServiceStack.Service;
using ServiceStack.ServiceHost;
using ServiceStack.WebHost;
using ServiceStack;
using ServiceStack.ServiceClient.Web;
using RestTestRoot; // This is the name of my DTO assembly. You will need to insert your own here.
using ServiceStack.ServiceInterface.ServiceModel;
namespace WebApplicationRoot
{
class HelloClient
{
JsonServiceClient hello_client;
//Request DTO
public class Hello
{
public string Name { get; set; }
}
//Response DTO
public class HelloResponse
{
public string Result { get; set; }
public ResponseStatus ResponseStatus { get; set; } //Where Exceptions get auto-serialized
}
//Can be called via any endpoint or format, see: http://mono.servicestack.net/ServiceStack.Hello/
public class HelloService : Service
{
public object Any(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name };
}
}
//REST Resource DTO
[Route("/todos")]
[Route("/todos/{Ids}")]
public class Todos : IReturn<List<Todo>>
{
public long[] Ids { get; set; }
public Todos(params long[] ids)
{
this.Ids = ids;
}
}
[Route("/todos", "POST")]
[Route("/todos/{Id}", "PUT")]
public class Todo : IReturn<Todo>
{
public long Id { get; set; }
public string Content { get; set; }
public int Order { get; set; }
public bool Done { get; set; }
}
public HelloClient(){
// ServiceStack gateway = new ServiceStack.ClientGateway(
// location.protocol + "//" + location.host + '/ServiceStack.Examples.Host.Web/ServiceStack/');
hello_client = new JsonServiceClient("http://tradetree2.dnsapi.info:8080/");
hello_client.Get<HelloResponse>("/hello/MyTestWorld!");
}
}
}