2011-07-01 6 views
1

私は自己ホスト型のようにして定義されている今WCF-ホスティングサービスを持っている:WCFサービスは要求データがどのように見えると思いますか?

[OperationContract] 
[WebInvoke(RequestFormat = WebMessageFormat.Json, Method = "PUT", UriTemplate = "/device")] 
void updateDeviceLevel(ZDevice device); 

ZDeviceクラスは次のようになります。

public class ZDevice { 
    public bool? newPowerState { get; set; } 
    public int nodeId {get; set;} 
} 

私は簡単なMacクライアントを持っていますこれはhttpポストを使用してサービスを消費します。 \devices urlに{"newLevel":27,"nodeId":6}と表示され、.NETは私のためにZDeviceオブジェクトに値を魔法のように詰め込みます。すべてここでうまくいきます。

ここでは、基本的なセキュリティをミックスに追加する必要があります。私は、メソッド呼び出しに新しいパラメータといくつかの「RequestWrapping」を追加することでこれをやった:

[OperationContract] 
[WebInvoke(RequestFormat = WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.WrappedRequest, Method = "PUT", UriTemplate = "/device")] 
void updateDeviceLevel(string password, ZDevice device); 

私は今、何をしようとしているサーバが消費するクライアントから期待しているものを構文把握です。私は{"password":"somepwd", "newLevel":27,"nodeId":6}の投稿がうまくいくと思っていましたが、.NETはもはや以前と同じようにZDeviceオブジェクトに「非直列化」することができなくなりました。

誰でも私にいくつかの提案がありますか?

おかげ

答えて

3

それは次のようになります。

{"password":"somepwd", "device": {"newLevel":27,"nodeId":6}} 

JSONオブジェクトの各プロパティに値を持っています。 deviceの場合は単なる新しいオブジェクトです。

ZDeviceクラスではnewPowerStateと呼ばれましたが、JSONではnewLevelと呼ばれています。あなたのクラスではそれもboolですが、JSONではintを割り当てています。何かが一致していません。

あなたのC#に基づいて、私はそれがこのように見えることを期待したい:C#でのパラメータ/プロパティ名と一致する必要があり、あなたのJSONオブジェクト内の

{"password":"somepwd", "device": {"newPowerState":true,"nodeId":6}} 

プロパティ名。

+0

DOH!私はそれを試みたと思ったが、私は "デバイス"ではなく "デバイス"を行った。ありがとう! – bugfixr

+0

他にもありがとう - 私は私の質問の作成に私のコードのいくつかを混ぜた。それを見渡す時間を取らずにすばやく投稿するために私にサービスしてください。 – bugfixr

関連する問題