servicestack 从控制台应用程序到服务堆栈的Json格式数据,servicestack,servicestack" /> servicestack 从控制台应用程序到服务堆栈的Json格式数据,servicestack,servicestack" />

servicestack 从控制台应用程序到服务堆栈的Json格式数据

servicestack 从控制台应用程序到服务堆栈的Json格式数据,servicestack,servicestack,我发现你是唯一一个为service stack回答问题的人,我没有电子邮件,而且你为我提供的最后一个问题似乎很好 我已经看到了你的个人资料,因为你是mythZ的主要创始人,我似乎再次问你我的问题 对于我的一个问题,将JSON格式的数据发布到服务堆栈,我感谢您的回答。 你的回答是对的,但是在我的案例中,我有以下案例。让我更详细地描述一下 我已经看到了服务堆栈的“Hello World”示例。我有链接 就我而言, 我有一个控制台应用程序,它调用服务堆栈(在数据库中插入数据) 现在,在那个控制台应用

我发现你是唯一一个为service stack回答问题的人,我没有电子邮件,而且你为我提供的最后一个问题似乎很好

我已经看到了你的个人资料,因为你是mythZ的主要创始人,我似乎再次问你我的问题

对于我的一个问题,将JSON格式的数据发布到服务堆栈,我感谢您的回答。 你的回答是对的,但是在我的案例中,我有以下案例。让我更详细地描述一下

我已经看到了服务堆栈的“Hello World”示例。我有链接

就我而言, 我有一个控制台应用程序,它调用服务堆栈(在数据库中插入数据) 现在,在那个控制台应用程序中,我创建了一个类(class1),它位于服务堆栈中,具有相同的属性

我在控制台应用程序中为该类的属性赋值,并将整个对象发布到服务堆栈。Syntex如下所示

 JsonServiceClient client = new JsonServiceClient(myURL);
       MYclass cls= MakeObjectForServiceStackToInsertData();
        var res = client.Post<MYClass>("/postrequest", cls); 
JsonServiceClient客户端=新的JsonServiceClient(myURL);
MYclass cls=MakeObjectForServiceStackToInsertData();
var res=client.Post(“/postrequest”,cls);
我已经用过上面的帖子了。看起来还可以。 在OnPOST事件中的服务堆栈端,我获取该数据并插入到DB中。 这对我来说很好

现在,我的客户希望我们需要以任何格式传递数据。JSON/XML。 我知道这是可能的,因为你给我提供了一个“你好世界”的例子链接,它是提到在那里

但我发现,他们使用ajax/Jquery将数据发布到服务。 在我的例子中,这是一个控制台应用程序,所以我不能使用ajax/Jquery。 我想知道,在我的例子中,是否有可能以JSON格式传递数据并执行操作


事先非常感谢

因此,如果您想将任何非类型和自由文本JSONXML发布到ServiceStack,那么您将无法访问ServiceStack的通用类型C#客户端(即其JsonServiceClient、XmlServiceClient等)。相反,您只需要使用任何基本的Http客户端,如.NET附带的HttpWebRequest

正如我前面提到的,发送自由文本json或xml不是调用ServiceStack web服务的正常方式(即,建议使用类型化DTO和一个通用服务客户端),但由于您在这里询问了如何调用示例web服务的独立、无依赖性示例:

发送免费文本JSON 发送自由文本XML
var-httpReq=(HttpWebRequest)WebRequest.Create(RemoteUrl);
httpReq.Method=“POST”;
httpReq.ContentType=httpReq.Accept=“application/xml”;
使用(var stream=httpReq.GetRequestStream())
使用(var sw=新StreamWriter(流))
{
书写(“世界!”);
}
使用(var response=httpReq.GetResponse())
使用(var stream=response.GetResponseStream())
使用(变量读取器=新的流读取器(流))
{
Assert.That(reader.ReadToEnd(),是.EqualTo(“你好,世界!”);
}
我已将上述示例添加到此中

我建议您熟悉HTTP流量分析器工具,这样您就可以轻松地查看向web服务发送和从web服务接收的HTTP流量。从那时起,能够训练如何呼叫您的服务变得微不足道。一些优秀的HTTP流量分析器包括:

  • 浏览器中的网络检查员(例如Chrome、Safari、Firefox和IE都有很好的工具)

感谢mythz,最终解决方案是在控制台应用程序中使用HTTPWebRequest生成JSON字符串并传递到服务堆栈,在那里反序列化并执行插入操作。或在控制台中传递创建对象并在控制台应用程序中分配属性值,然后将整个对象作为DTO传递给服务堆栈并执行插入操作您对上述内容有何建议?????哪一个更好,因为JSON将创建一个长字符串,并且在服务堆栈端反序列化时,必须键入类似于属性的名称以映射对象。一个类型化的API使其易于编码、迭代开发和重构。在大多数情况下,您只需删除.dll,就有了最新的更改,如果某个内容被破坏(即客户端依赖于删除的字段),您在编译时就知道了,这会更好。至于序列化程序,我建议使用JSON,ServiceStack的JsonSerializer更快,对DTO更改更具弹性。
const string RemoteUrl = "http://www.servicestack.net/ServiceStack.Hello/servicestack/hello";

var httpReq = (HttpWebRequest)WebRequest.Create(RemoteUrl);
httpReq.Method = "POST";
httpReq.ContentType = httpReq.Accept = "application/json";

using (var stream = httpReq.GetRequestStream())
using (var sw = new StreamWriter(stream))
{
    sw.Write("{\"Name\":\"World!\"}");
}

using (var response = httpReq.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    Assert.That(reader.ReadToEnd(), Is.EqualTo("{\"Result\":\"Hello, World!\"}"));
}
var httpReq = (HttpWebRequest)WebRequest.Create(RemoteUrl);
httpReq.Method = "POST";
httpReq.ContentType = httpReq.Accept = "application/xml";

using (var stream = httpReq.GetRequestStream())
using (var sw = new StreamWriter(stream))
{
    sw.Write("<Hello xmlns=\"http://schemas.servicestack.net/types\"><Name>World!</Name></Hello>");
}

using (var response = httpReq.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    Assert.That(reader.ReadToEnd(), Is.EqualTo("<HelloResponse xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.servicestack.net/types\"><Result>Hello, World!</Result></HelloResponse>"));
}