我需要开发一个 web 服务,它将通过 SOAP 向 java 客户端公开。我们有一个定义明确的模式,用于在两个系统之间进行通信。现在我需要在我的 WCF 合同上公开一个操作,该合同接受 Schema 对象并将其存储在我们的数据库中。
我已按照以下内容开发 Web 服务。
- 在 wcf 中通过 basichttp 托管它
- 使用 xsd.exe 创建架构的对象模型
- 将模式作为操作的参数,例如 DoThis(SchemaObject schema)
由于这将在 WCF 中公开,因此我已经修改了 xsd 工具生成的对象模型。我们的模式具有多级嵌套,并且是由 4 个不同模式链接在一起的组合。xsd工具生成的对象图有抽象类、继承等。
为此,我已经在每个类上定义了 DataContract 属性并向其添加了命名空间,该命名空间已经存在于 XmlTypeAttribute 中。我还为每个属性添加了 DataMemebers。
架构中的一些属性是由工具使用 xmlarrayitem 属性定义的数组。
现在,当我使用 SOAP UI 发送请求时,对象没有按预期反序列化。几乎所有字段都以 null 的形式出现,它具有某种继承层次结构。我已将 KnownType 属性添加到适当的数据合同中,但仍然无法正常工作。
我的问题是:
这是开发网络服务的正确方法吗?
有没有办法避免放置数据合同和数据成员,而只使用 xsd 工具添加的序列化属性?
是否有必要使用 datacontract 属性,它不会与 xmlserialization 属性一起使用,因为它在 xml 反序列化的情况下工作?