WCF“始终生成消息协定”不会生成MessageContract

时间:2010-09-15 20:17:45

标签: c# wcf wsdl svcutil.exe messagecontract

我正在导入WSDL作为服务定义(入站到我的服务),并且无论出于何种原因,客户端正在格式化请求,以便WCF无法在没有MessageContract装饰的代理类的情况下反序列化它。

我已经通过在主容器类上添加MessageContract属性来实现这一点,这很好,因为WCF将它们构建为部分类,这意味着我可以装饰我的部分并保留生成的部分单独。但是,为了正确反序列化主容器类上的属性,我必须使用指定命名空间的MessageBodyMember属性来装饰它们。

这显然是一个BadThing®,因为这意味着每次从WSDL重新生成时,我都将失去从客户端接收消息的能力。我已经在服务引用配置上设置了“始终生成消息合同”,但它似乎是一个谎言 - 无论是否将我的部分类设置为MessageContract,都不会生成消息契约。

有什么方法可以强制WCF生成这些MessageContract

修改

我不确定它是否相关,但是当svcutil生成代理类时,它会使用

来修饰属性
[XmlElement(Order=0)]
//Property definition

当我添加MessageContract属性时,服务会中断消息

  

显式排序不能用于参数或返回值。请从自定义属性中删除Order属性。

在成功调用服务之前,我必须从生成的XmlElement属性中删除所有Order指令。

1 个答案:

答案 0 :(得分:0)

我发现了类似的东西。似乎我绑定的服务是发出一个响应,该响应的字段顺序与用于构建引用的WSDL不匹配。