0

WCF-Webサービスを作成するときに発生する舞台裏の魔法について疑問に思っています。

ある古いプロジェクトでは、JavaScriptから次のようなメソッドを呼び出すことができます。

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
IEnumerable<Result> SearchObjects(string x, int y, double z);

これは、JavaScriptから{"x": "something"、 "y":1、 "z":1.5}を送信すると機能します。

そのWebサービスの作成から数か月後、私はWCF Web APIを見つけて、同様のものを作成しようとしました。

違いは、HttpServiceHostFactory()を使用してGlobal.asaxにルートを作成したことです。

メソッドを呼び出そうとすると、次のような例外が発生します

例外の詳細:System.InvalidOperationException:HttpOperationHandlerFactoryは、サービス操作'Invoke_LoginRequest'の要求メッセージコンテンツに関連付ける必要がある入力パラメーターを決定できません。操作が要求メッセージの内容を予期しない場合は、操作でHTTPGETメソッドを使用します。それ以外の場合は、1つの入力パラメーターのIsContentParameterプロパティが「True」に設定されているか、次のいずれかに割り当て可能なタイプであることを確認してください:HttpContent、ObjectContent1 1, HttpRequestMessage or HttpRequestMessage

そしてそれを機能させるには、このようなメソッドを宣言する必要があります(VB.Net)

Public Function Invoke_LoginRequest(ByVal request As HttpRequestMessage(Of JsonValue)) As HttpResponseMessage(Of String)

ただし、JsonValueを手動で解析する必要があります。では、古いバージョンは実際にどのように機能しますか?そして、私がその振る舞いを取り戻すことができる方法はありますか?

よろしくジェスパー

4

1 に答える 1

0

1)受け取りたいデータを含むクラスを定義します。

public class Model
{
    public string x { get; set; }
    public int y { get; set; }
    public double z { get; set; }
}

2)操作パラメータを次のように定義しますObjectContent<Model>

public HttpResponseMessage Post(ObjectContent<Model> c){
    Model m = c.ReadAs();
    ...
}

HTHペドロ

于 2011-10-28T23:13:41.263 に答える