【问题标题】:WSDL handling practices for external service外部服务的 WSDL 处理实践
【发布时间】:2010-12-02 01:14:39
【问题描述】:

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

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

我开始了

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

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

然后仅使用我的类文件“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

或者我是不是搞错了?

【问题讨论】:

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


    【解决方案1】:

    以下是否按预期工作?

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

    【讨论】:

    • 我不确定这是否按预期工作,我有一大堆不同的类,名称相同,如 Account1 Account2 等。这可能是他们的 XSD 搞砸了 =/
    【解决方案2】:

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

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

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

    我对 WSCF 的问题(请注意经典)是它不执行“xml 命名空间”到“c# 命名空间”的映射...实际上我必须自己将它添加到工具中...(我试过将其提交回项目,但遗憾的是从未收到回复)

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

    希望对你有所帮助..

    【讨论】:

    • “依赖于 Oracle 托管的 Web 服务(不是 WCF)”如果我可以控制可以用 WCF 替换 Web 服务的代码,我可能只是使用 NHibernate。
    • 我会选择这个答案,因为它真的只是承认不是 WCF 的 Web 服务很糟糕,问题是 Web 服务不是 WCF。
    • 非常感谢克里斯 - 但我实际上是在提倡我在这方面使用的每个 Microsoft 网络服务堆栈都“很糟糕”(虽然大部分情况下 - 我喜欢 MS 的堆栈)......我真的鼓励您研究 WSCF.Blue... 我认为它可以满足您的需求 - 或者至少让您更接近...(我在 .NET 中处理的每个项目中都使用它)你会发现最大的“爆炸”是“在单独的文件中发出”的选项......然后 - 即使 EXACT 相同的类被多次发出它只是被覆盖......(假设它们是' t“实际”名称冲突)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多