0

我有一个项目,它依赖于 Oracle 托管 Web 服务(不是 WCF)。我有一份服务的 WSDL 及其相关的 XSD。

为此生成代理和数据合同程序集的正确方法是什么?

我从

XSD.exe /c /language:CS user.xsd 

对于我的每个 xsds。这会生成一堆具有共享类型冲突的类对象(所有类中的相同对象),因此我修剪了所有重复项,以便它们具有单个声明。

然后仅使用我的类文件“datacontracts.dll”构建该程序集

然后我生成了我的服务客户端

svcutil.exe user.wsdl /n*:SomeNameSpace /r:datacontracts.dll /noconfig

但这似乎并没有真正给出我想要的,因为它仍然导致服务客户端内的所有类的重复。

在从 XSD 生成的类中,我确实注意到每个类定义都有

[XmlType(Namespace = "urn:/crmondemand/xml/...")]

我是否需要将该属性以它在重复类中显示的方式放置一次,以便在我将其设为单数类的每个类中?这样我就有

[XmlType(Namespace = "urn:/crmondemand/xml/user")]
[XmlType(Namespace = "urn:/crmondemand/xml/campaign")]
[XmlType(Namespace = "urn:/crmondemand/xml/lead")]
public class SharedClass

还是我接近这个错误?

4

2 回答 2

1

首先是一个警告......你可能知道 - 但如果你不知道,我肯定会说修剪生成的代码是灾难的根源......

至于重用类型 - 我自己从未发现 Microsoft 堆栈在这方面特别好......虽然有两种思路......一种说“所有 Web 服务” - 就其本质而言 - 是独立的实体...因此 - 发出的所有代码仅在该 Web 服务内有效。

我觉得这是非常短视的。我更喜欢重用我可以重用的任何类型...但是对于 .NET,我发现这非常困难...我发现的最接近的东西是一个名为 WSCF 的工具。它做了一些我真正喜欢的好事情,例如为每个类发出单独的 cs 文件。这使得从其他源“覆盖”它们——只要源生成可序列化的等价物——非常容易......

我遇到的 WSCF 问题(请注意经典)是它没有将“xml 名称空间”映射到“c# 名称空间”……我实际上必须自己将它添加到工具中……(我试图提交它回到项目,但遗憾地没有收到回音)

所以我会告诉你尝试 WSCF.blue(目标 WCF)或查看 WCF 经典。您可以在 codeplex 上找到它们。

希望能帮到你。。

于 2009-09-29T01:52:55.597 回答
0

以下内容没有按预期工作吗?

svcutil *.wsdl *.xsd /language:C#
于 2009-09-28T16:16:03.610 回答