servicestack,C#,.net,Visual Studio,Rest,servicestack" /> servicestack,C#,.net,Visual Studio,Rest,servicestack" />

ServiceStack C#强类型客户端DTO

ServiceStack C#强类型客户端DTO,c#,.net,visual-studio,rest,servicestack,C#,.net,Visual Studio,Rest,servicestack,这里:这里是关于如何为C#客户机重新使用DTO构建项目的建议 显然,这是通过包含DTO程序集的dll来实现的。我在网上搜索了一个例子,just Hello World,它在ServiceStack中为C#客户机使用单独的汇编DTO。也许我应该能够自己解决这个问题,但到目前为止还没有证明这很容易 几乎所有的客户机描述都是针对泛型和非类型JSON或其他非DTO客户机的。似乎没有人像我这样对类型化C#客户机感兴趣(甚至我找到的ServiceStack文档)。所以我认为这是一个好问题,即使最后我自己也能

这里:这里是关于如何为C#客户机重新使用DTO构建项目的建议

显然,这是通过包含DTO程序集的dll来实现的。我在网上搜索了一个例子,just Hello World,它在ServiceStack中为C#客户机使用单独的汇编DTO。也许我应该能够自己解决这个问题,但到目前为止还没有证明这很容易

几乎所有的客户机描述都是针对泛型和非类型JSON或其他非DTO客户机的。似乎没有人像我这样对类型化C#客户机感兴趣(甚至我找到的ServiceStack文档)。所以我认为这是一个好问题,即使最后我自己也能解决

为了清楚起见,我已经构建并运行了Hello World示例服务器。我还使用浏览器连接到服务器并与之交互。我还创建了一个可以调用

JsonServiceClient客户端=新的JsonServiceClient(myURL)

然后我尝试在没有程序集DLL的情况下复制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未定义。

我可以通过添加以下内容找到缺少的符号ResponceStatus:

using ServiceStack.ServiceInterface.ServiceModel;
下面是构建的完整代码。请记住,我在这个过程中发现了其他一些东西。一旦构建完成,它就失败了,因为我在.NET3.5环境中使用了.NET4.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!");
        }
    }
}
使用ServiceStack.ServiceClient;
使用ServiceStack.ServiceInterface;
使用ServiceStack.Text;
使用ServiceStack.Service;
使用ServiceStack.ServiceHost;
使用ServiceStack.WebHost;
使用ServiceStack;
使用ServiceStack.ServiceClient.Web;
使用RestTestRoot;//这是我的DTO程序集的名称。您需要在此处插入自己的。
使用ServiceStack.ServiceInterface.ServiceModel;
命名空间WebApplicationRoot
{
类HelloClient
{
JsonServiceClient hello_客户端;
//请求DTO
公共课你好
{
公共字符串名称{get;set;}
}
//响应DTO
公共类Hello响应
{
公共字符串结果{get;set;}
public ResponseStatus ResponseStatus{get;set;}//其中异常自动序列化
}
//可以通过任何端点或格式调用,请参见:http://mono.servicestack.net/ServiceStack.Hello/
公共类HelloService:服务
{
公共对象任意(Hello请求)
{
返回新的HelloResponse{Result=“Hello,”+request.Name};
}
}
//REST资源DTO
[路线(“/TODO”)]
[路由(“/todos/{Ids}”)]
公共类待办事项:IReturn
{
公共长[]标识{get;set;}
公共TODO(参数长[]ID)
{
这个.Ids=Ids;
}
}
[路线(“/todos”,“POST”)]
[路由(“/todos/{Id}”,“PUT”)]
公共类待办事项:IReturn
{
公共长Id{get;set;}
公共字符串内容{get;set;}
公共整数顺序{get;set;}
公共bool Done{get;set;}
}
公共HelloClient(){
//ServiceStack网关=新ServiceStack.ClientGateway(
//location.protocol+“/”+location.host+”/ServiceStack.Examples.host.Web/ServiceStack/”);
hello_client=新的JsonServiceClient(“http://tradetree2.dnsapi.info:8080/");
hello_client.Get(“/hello/MyTestWorld!”);
}
}
}

如果您发布一些代码,会更加清晰。目前,您的问题似乎在其他地方,因为包含Dtos库的工作原理与包含任何其他dll的工作原理完全相同。我没有发布代码,因为代码都在的公共源代码域中。如果我遵循该教程,我可以构建我为Host.Asp.Net所做的Hello应用程序。那就是服务器。我试图复制DTO代码的客户:@JoannaTurban我希望我添加的代码就是您所指的。