Данные формата Json из консольного приложения в стек служб - PullRequest
4 голосов
/ 08 ноября 2011

Я обнаружил, что вы единственный, кто отвечает за стек обслуживания, у меня нет электронных писем, и то, что вы когда-либо предоставляли мне для последних вопросов, кажется нормальным

Я видел ваш профиль и, поскольку вы являетесь основным основателем 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. Я знаю, что это возможно, если вы предоставите мне пример ссылки «Привет, мир», там есть упоминание.

Но все, что я нашел, это то, что они использовали ajax / Jquery для отправки данных на сервис. В моем случае это консольное приложение, поэтому я не могу использовать ajax / Jquery. Мне интересно, возможно ли передать данные в формате JSON и выполнить операцию в моем случае.

Большое спасибо заранее.

1 Ответ

6 голосов
/ 08 ноября 2011

Так что если вы хотите опубликовать любые нетипизированные и свободные тексты 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Модульный тест .

Я рекомендую ознакомиться с инструментом анализатора HTTP-трафика, чтобы вы могли легко видеть HTTP-трафик, отправляемый и получаемый от вашего веб-сервиса и от него.С тех пор возможность выяснить, как позвонить в вашу службу, становится тривиальной.Некоторые отличные анализаторы трафика HTTP включают в себя:

  • Fiddler
  • Сетевые инспекторы в браузере (например, Chrome, Safari, Firefox и IE имеют отличные инструменты)
  • WireShark
...