8

私はRESTfulサービスの初心者です。

クライアントが最大9つのパラメーターを渡す必要があるインターフェースを作成する必要があります。

パラメータをJSONオブジェクトとして渡したいと思います。

たとえば、私のJSONが次の場合:

'{
    "age":100,
    "name":"foo",
    "messages":["msg 1","msg 2","msg 3"],
    "favoriteColor" : "blue",
    "petName" : "Godzilla",
    "IQ" : "QuiteLow"
}'

そして、最後に以下のサーバー側のメソッドを実行する必要がある場合:

public Person FindPerson(Peron lookUpPerson)
{
Person found = null;
// Implementation that finds the Person and sets 'found'
return found;
}

質問:
上記のJSON文字列を使用してクライアント側からどのように電話をかける必要がありますか?そして、RESTfulサービスメソッドの署名と実装をどのように作成できますか?

  • このJSONを受け入れ、
  • それを解析してPersonオブジェクトに逆シリアル化し、
  • FindPersonメソッドの戻り値を呼び出してクライアントに返しますか?
4

2 に答える 2

14

そのJSON入力を受け取るWCF操作を作成する場合は、その入力にマップするデータコントラクトを定義する必要があります。これを自動的に行うツールがいくつかあります。その中には、しばらく前にhttp://jsontodatacontract.azurewebsites.net/で書いたものもあります(このツールの書き方の詳細については、このブログ投稿を参照してください)。ツールはこのクラスを生成しました。これを使用できます。

// Type created for JSON at <<root>>
[System.Runtime.Serialization.DataContractAttribute()]
public partial class Person
{

    [System.Runtime.Serialization.DataMemberAttribute()]
    public int age;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string name;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string[] messages;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string favoriteColor;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string petName;

    [System.Runtime.Serialization.DataMemberAttribute()]
    public string IQ;
}

次に、それを受け取るための運用契約を定義する必要があります。JSONはリクエストの本文に含める必要があるため、使用する最も自然なHTTPメソッドはですPOST。そのため、操作を次のように定義できます。メソッドは「POST」、スタイルは「Bare」(つまり、JSONを意味します)パラメータに直接マップします)。およびはそれぞれデフォルト値であるため、MethodおよびBodyStyleプロパティを省略できることに注意してください)。"POST"WebMessageBodyStyle.Bare

[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public Person FindPerson(Peron lookUpPerson)
{
    Person found = null;
    // Implementation that finds the Person and sets 'found'
    return found;
}

これで、メソッドで入力がにマップされましたlookupPerson。メソッドのロジックをどのように実装するかはあなた次第です。

コメント後に更新

JavaScriptを使用して(jQueryを介して)サービスを呼び出す1つの例を以下に示します。

var input = '{
    "age":100,
    "name":"foo",
    "messages":["msg 1","msg 2","msg 3"],
    "favoriteColor" : "blue",
    "petName" : "Godzilla",
    "IQ" : "QuiteLow"
}';
var endpointAddress = "http://your.server.com/app/service.svc";
var url = endpointAddress + "/FindPerson";
$.ajax({
    type: 'POST',
    url: url,
    contentType: 'application/json',
    data: input,
    success: function(result) {
        alert(JSON.stringify(result));
    }
});
于 2012-12-17T21:31:28.047 に答える
1

1-WebGet属性を追加します

<OperationContract()> _
        <WebGet(UriTemplate:="YourFunc?inpt={inpt}", BodyStyle:=WebMessageBodyStyle.Wrapped,
                RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Xml)> _
        Public Function YourFunch(inpt As String) As String

2-NewtonSoftを使用してjsonをオブジェクトにシリアル化/逆シリアル化します(上記は文字列のみを使用することに注意してください)。NewtonSoftはMSシリアライザーよりもはるかに高速です。

シリアル化にNewtonSoftを使用するhttp://json.codeplex.com/

3-.svcファイルにはFactory="System.ServiceModel.Activation.WebServiceHostFactoryが含まれます

4-web.configに含まれる

     <behaviors>
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>

...と...

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
于 2012-12-17T14:19:43.193 に答える