Данные формата Json из консольного приложения в стек служб
Я обнаружил, что вы единственный, кто отвечает за стек обслуживания, у меня нет электронных писем, и то, что вы когда-либо предоставляли мне для последних вопросов, кажется нормальным.
Я видел ваш профиль и, поскольку вы являетесь основным основателем mythZ, я, похоже, снова задаю вам свой вопрос.
Для одного из моих вопросов, POST-данных в формате JSON в стеке службы, я ценю ваш ответ. Ваш ответ правильный, однако в моем случае у меня следующий случай. Позвольте мне описать более подробно.
Я видел "Hello World" пример стека услуг. Я получил ссылку для https://github.com/ServiceStack/ServiceStack.Extras/blob/master/doc/UsageExamples/UsingRestAndJson.cs
В моем случае у меня есть консольное приложение, которое вызывает сервисный стек (который вставляет данные в БД). Теперь в этом консольном приложении я создал один класс (class1), который находится в сервисном стеке с такими же свойствами.
Я присваиваю значения свойствам этого класса в моем консольном приложении и помещаю весь объект в стек обслуживания. Синтекс, как показано ниже
JsonServiceClient client = new JsonServiceClient(myURL);
MYclass cls= MakeObjectForServiceStackToInsertData();
var res = client.Post<MYClass>("/postrequest", cls);
Я использую POST, как указано выше. что кажется нормальным в конце стека службы в событии OnPOST, я получаю эти данные и вставляю в БД. Это работает нормально для меня.
Теперь мой клиент хочет, чтобы нам нужно было передавать данные в любом формате. JSON/XML. Я знаю, что это возможно, так как вы предоставляете мне пример ссылки "Hello world", там есть упоминание.
Но все, что я нашел, это то, что они использовали ajax/Jquery для отправки данных на сервис. В моем случае это консольное приложение, поэтому я не могу использовать ajax/Jquery. Мне интересно, возможно ли передать данные в формате JSON и выполнить операцию в моем случае.
Заранее большое спасибо.
1 ответ
Поэтому, если вы хотите опубликовать любой нетипизированный и свободный текст JSON или XML в ServiceStack, вы не сможете использовать универсальные типизированные клиенты C# ServiceStack (т.е. его JsonServiceClient, XmlServiceClient и т. Д.). Вместо этого вам просто нужно использовать любой основной Http-клиент, такой как HttpWebRequest, который поставляется с.NET.
Как я уже упоминал ранее, отправка произвольного текста в формате json или xml не является обычным способом вызова веб-служб ServiceStack (т.е. рекомендуется использовать типизированные DTO и один из универсальных клиентов службы), но, поскольку вы спросили здесь, существуют стандартные одни, независимые примеры того, как вызвать пример веб-службы Hello World в ServiceStack:
Отправка свободного текста 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-трафика, чтобы вы могли легко видеть HTTP-трафик, отправляемый и получаемый от вашего веб-сервиса. С тех пор возможность выяснить, как позвонить в вашу службу, становится тривиальной. Некоторые большие анализаторы трафика HTTP включают в себя: