複数のパラメータをWCF Web APIサービスに渡す

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

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

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

JavaScriptから{"x": "something"、 "y":1、 "z":1.5}を送信したときに動作します。

そのWebサービスの作成から数ヶ月後に、WCF Web APIを見つけて同様のことを試みました。

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

今私はメソッドを呼び出すときに、私はこのような例外が発生します

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

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

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

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

宜しくお願いします Jesper

0
これに受け入れられる解決策を見つけましたか?私は同様のものを探していますが、URLでエンコードされたPOSTボディから脱飾しています。
追加された 著者 stevenrcfox,

1 答え

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

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

2) Define the operation parameter as an ObjectContent

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

HTH ペドロ

0
追加された
モデルを入力として受け取り、個々のメンバーを出力する操作ハンドラを挿入できます。そして、これらの個々のメンバは、操作のパラメータ
追加された 著者 Pedro Felix,
はい、私はそれが面倒であることに同意します。代わりに、1)ハンドラの入力としてHttpRequestMessage を持っている。 2)要求からJsonValueとしてコンテンツを取得する3)各操作パラメータ(すべての単純型)に対して、JsonValueから値を取得する
追加された 著者 Pedro Felix,
それはちょっといいですが、JSONの自動シリアル化はどこに行きましたか?とにかく自分でできるのですか?だから私は最初の例のようにパラメータを渡すことができます。
追加された 著者 HerrLiljegren,
したがって、Webサービスに公開される各メソッドのモデルオブジェクトが必要ですか?それは聞こえる、面倒な...推測私は、操作のパラメータに変換カスタム操作ハンドラを作成する方法を見つけるしようとします。
追加された 著者 HerrLiljegren,