2011-05-03 90 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是被称为不仅对包装的请求参数,但每个参数作为好。