因此,如果您想将任何无类型和自由文本 JSON或XML发布到 ServiceStack,那么您将无法使用 ServiceStack 的通用类型 C# 客户端(即它的 JsonServiceClient、XmlServiceClient 等)。相反,您只需要使用任何基本的 Http 客户端,例如.NET 附带的HttpWebRequest 。
正如我之前提到的,发送自由文本 json 或 xml 不是调用 ServiceStack Web 服务的正常方式(即建议使用类型化 DTO 和通用服务客户端之一),但既然你在这里问过,那就是立场 -单独的,如何调用ServiceStack 的 Hello World示例 Web 服务的无依赖示例:
发送自由文本 JSON
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!\"}"));
}
发送自由文本 XML
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>"));
}
我已将上述示例添加到此Runnable Unit Test中。
我建议您熟悉 HTTP 流量分析器工具,以便您可以轻松查看发送到您的 Web 服务和从您的 Web 服务接收到的 HTTP 流量。从那时起,能够锻炼如何调用您的服务变得微不足道。一些出色的 HTTP 流量分析器包括:
- 提琴手
- 浏览器中的网络检查器(例如 Chrome、Safari、Firefox 和 IE 有很好的工具)
- 线鲨