2011-05-03 92 views
0

我有一個股票WCF Rest應用程序(默認Web.config,Web路由)。我無法讓WCF框架將請求流自動反序列化爲類型化對象。我有一個形式的方法簽名服務...無法通過強類型參數POST到WCF Rest服務

[WebInvoke(Method = "POST", 
      UriTemplate = "", 
      BodyStyle = WebMessageBodyStyle.WrappedRequest, 
      ResponseFormat = WebMessageFormat.Json)] 
MethodA(FirstParam first, SecondParam second) 

如果我開始使用$就我得到一個400錯誤的請求錯誤小提琴手或jQuery的請求。我做了大量的搜索,發現改變方法sig來使用System.IO.Stream允許執行該方法,但是它也增加了對對象進行反序列化的開銷。

原始請求體是如下

{ 
    "first":"{\"p1\":\"p1 value\",\"p2\":\"p2 value\",\"p3\":100\"p4\":null}", 
    "second":"{\"p1\":\"p1 value\"}" 
} 

葉應用甚至不打入服務本身,除非該方法具有無論是流,或沒有參數。在這個服務中只有1個post方法,另一個是正確工作的GET方法。

我已經使用http://www.codeproject.com/KB/ajax/jQueryWCFRest.aspx作爲參考實現,但一直無法讓它在此解決方案上工作。

有沒有什麼,我在這裏失蹤,希望別人可以看到?

Leon

回答

0

Bleh ...問題原來是請求序列化值的方式!

{ 
    "first":"{\"p1\":\"p1 value\",\"p2\":\"p2 value\",\"p3\":100\"p4\":null}", 
    "second":"{\"p1\":\"p1 value\"}" 
} 

本來應該沒有逃脫引號....

{ 
    "first":"{"p1":"p1 value","p2":"p2 value","p3":100"p4":null}", 
    "second":"{"p1":"p1 value"}" 
} 

這發生的原因是JSON.stringify是被稱爲不僅對包裝的請求參數,但每個參數作爲好。