【发布时间】:2011-05-02 17:34:01
【问题描述】:
我有一个 使用 可以正常工作的 WCF Web 服务。在某个地方它停止了,我不知道为什么。代码和界面从未改变过,web.config 也没有改变(至少与 web 服务部分无关)。我有一堂课:
[DataContract]
public class QuizServiceArgs
{
[DataMember(IsRequired = true, Order = 1)]
public int Category1 { get; set; }
[DataMember(IsRequired = true, Order = 2)]
public int Category2 { get; set; }
[DataMember(IsRequired = true, Order = 3)]
public int Category3 { get; set; }
[DataMember(IsRequired = true, Order = 4)]
public int Category4 { get; set; }
}
而且服务接口简单:
public interface IQuizService
{
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json)]
ServiceResult Save(QuizServiceArgs answers, string strvalue, int intvalue);
}
添加后两个参数strvalue 和intvalue 仅用于故障排除,以查看它们是否被反序列化 - 确实如此。当我点击服务时,我收到一条错误消息,提示我缺少请求中的 Category1 参数,但正如您可以看到这个 Fiddler 屏幕截图,值在那里。
我可以获取要传入的原始值,但对象似乎都被实例化为 null 或默认值。我做错了什么?
更新
我从来没有真正回答过我原来的问题,这很糟糕,但 Sixto 建议我将我的序列化转换为 JSON。 JSON 是最初的设计,但在我遇到问题时被否决了。在我成功切换回 JSON 后,一切都在正确序列化和反序列化。现在我只是在等待它中断,没有任何解释,所以我可以切换回 XML....
【问题讨论】:
-
顺便说一句,我从 fiddler 请求中裁剪出一些我认为是噪音的标头。如果图片中没有 Content-length 属性,请不要担心,请求中有一个 :)
-
您是否更改了数据成员属性的 Order 属性?或者任何命名空间?或者删除任何成员?
-
@Marc 属性在 POST 中的顺序与在代码中指定的顺序相同。我没有任何命名空间——我在其他项目中将其保留为空,并且运行良好。我没有删除任何成员。这实际上是我的整个
QuizServiceArgs课程。
标签: c# wcf web-services serialization deserialization