WCF Web サービス に JSON オブジェクト を 渡す 方法

0 件のコメント

WCFサービスで、JSONオブジェクト を POST で渡す方法を記載します。

WCFサービスで RESTful なサービスを作成しようとすると、JSON を POST したいケースが出てきます。 ここでは、POST された JSONオブジェクト を受け取れるサービスの実装例を記載します。 POST 以外の PUT、DELETE なども、 Method を変更することで実装ができます。 また、どのようなリクエストを行うかも合わせて記載します。

サンプルコード

データコントラクト

サーバーとクライアントでデータをやり取りする際の取り決めごとを定義します。 定義の仕方は DataContract 属性 を指定することで定義します。 プロパティの指定には DataMember 属性IgnoreDataMember 属性 で指定します。

namespace WcfService
{
    using System.Runtime.Serialization;

    [DataContract]
    public class Book
    {
        [DataMember(Name = "title")]
        public string Title { get; set; }

        [DataMember(Name = "author")]
        public string Author { get; set; }

        [DataMember(Name = "isbn")]
        public string ISBN { get; set; }

        [DataMember(Name = "publisher")]
        public string Publisher { get; set; }
    }
}

インターフェース

POST、PUT、DELETE 等 GET 以外のメソッドを利用する場合、WebInvoke 属性 を指定します。 UriTemplage プロパティ では、グローバルアプリケーションクラス で指定される ルートプレフィックス 以降の URI を定義します。 先頭のバックスラッシュ("/")はあってもなくても同じみたいです。

namespace WcfService
{
    using System.ServiceModel;
    using System.ServiceModel.Web;

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "POST",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            UriTemplate = "/Add")]
        void AddBook(Book book);
    }
}

リクエスト

リクエストの中身が JSON なので、Content-Type: application-json を指定してリクエストします。

POST http://localhost:8000/Service/Add HTTP/1.1
User-Agent: Fiddler
Host: localhost:8000
Content-Type: application/json
Content-Length: 86

{"title":"○×△", "author":"garafu", "publisher":"contso.com", "isbn":"1234567890"}

関連記事