外部服务的WSDL处理实践

时间:2009-09-28 15:59:19

标签: c# xml web-services wsdl svcutil.exe

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

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

我从

开始
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

或者我是否接近这个错误?

2 个答案:

答案 0 :(得分:1)

首先警告......你可能知道 - 但是如果你不这样做我肯定会说修剪生成的代码是灾难的秘诀......

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

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

我对WSCF的问题(经典的想法)是它没有“xml命名空间”到“c#namespace”映射...我实际上必须自己添加到工具...(我试过把它交还给项目,但从未悲伤地回复过来)

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

希望能帮到你..

答案 1 :(得分:0)

以下是否按预期工作?

svcutil *.wsdl *.xsd /language:C#