4

サービススタックに回答するのはあなただけであることがわかりました。メールはありません。最後の質問に対してあなたが提供したものは何でも問題ないようです。

私はあなたのプロフィールを見ました、そしてあなたはmythZの主な創設者なので、私はあなたにもう一度私の質問をするようです。

私の質問の1つである、JSON形式のPOSTデータをサービススタックに送信してください。ご回答いただければ幸いです。あなたの答えは正しいですが、私の場合は次のような場合があります。詳しく説明します。

サービススタックの「HelloWorld」の例を見てきました。https://github.com/ServiceStack/ServiceStack.Extras/blob/master/doc/UsageExamples/UsingRestAndJson.csのリンクを取得しました

私の場合、サービススタック(DBにデータを挿入する)を呼び出すコンソールアプリケーションがあります。そのコンソールアプリケーションで、同じプロパティを持つサービススタックにある1つのクラス(class1)を作成しました。

コンソールアプリケーションでそのクラスのプロパティに値を割り当て、オブジェクト全体をサービススタックにPOSTします。Syntexは以下のようなものです

 JsonServiceClient client = new JsonServiceClient(myURL);
       MYclass cls= MakeObjectForServiceStackToInsertData();
        var res = client.Post<MYClass>("/postrequest", cls); 

上記のようにPOSTを使用しています。大丈夫そうです。OnPOSTイベントのサービススタックの最後で、このデータを取得してDBに挿入します。それは私にとってはうまくいっています。

今、私のクライアントは、任意の形式でデータを渡す必要があることを望んでいます。JSON/XML。「Helloworld」のサンプルリンクを提供していただければ可能です。あちらで言及されています。

しかし、私が見つけたのは、ajax/Jqueryを使用してデータをサービスに投稿したことだけです。私の場合、これはコンソールアプリケーションであるため、ajax/Jqueryを使用できません。私の場合、JSON形式でデータを渡して操作することは可能でしょうか。

事前にどうもありがとうございました。

4

1 に答える 1

6

したがって、型指定されていないフリーテキストの JSONまたはXMLをServiceStackに投稿する場合、ServiceStackの汎用型付きC#クライアント(つまり、JsonServiceClient、XmlServiceClientなど)を送信することはできません。代わりに、.NETに付属しているHttpWebRequestなどの基本的なHttpクライアントを使用する必要があります。

前に述べたように、フリーテキストのjsonまたはxmlを送信することは、ServiceStack Webサービスを呼び出す通常の方法ではありません(つまり、型付きDTOと汎用サービスクライアントの1つを使用することをお勧めします)。単独で、ServiceStackのHelloWorldサンプル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>"));
}

上記の例をこの実行可能単体テストに追加しました。

Webサービスとの間で送受信されるHTTPトラフィックを簡単に確認できるように、HTTPトラフィックアナライザツールに精通することをお勧めします。それ以降、サービスの呼び出し方法を理解できるようになるのは簡単です。優れたHTTPトラフィックアナライザには次のものがあります。

  • フィドラー
  • ブラウザのネットワークインスペクター(Chrome、Safari、Firefox、IEなどには優れたツールがあります)
  • WireShark
于 2011-11-08T06:31:42.897 に答える