2009-09-28 75 views
0

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

生成代理和datacontract程序集的正确方法是什么?

我开始与

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 

或者我接近这个错误?

回答

1

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

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

我觉得这是令人难以置信的短视。我更喜欢重复使用任何类型的数据...但是使用.NET,我发现这非常困难......我发现的最接近的工具是名为WSCF的工具。它做了一些很好的事情,我真的很喜欢,例如为每个班级发放单独的cs文件。这使得“覆盖”他们从其他来源 - 只要源生成可串行化的等价物 - 很容易...

我与WSCF(经典头脑你)的问题是,它不会“xml命名空间“到”c#命名空间“映射......我实际上不得不将它添加到工具本身......(我试图将它提交回该项目,但从未听到过悲伤)

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

希望帮助你了..

+0

“依赖于Oracle托管的Web服务(而不是WCF)”如果我已经控制了代码,我可以用WCF替换Web服务我可能只是使用NHibernate。 – 2009-09-29 14:12:17

+0

我会回答这个问题,因为它确实只是承认不是WCF吸收的Web服务,问题是Web服务不是WCF。 – 2009-10-19 12:49:41

+0

非常感谢克里斯 - 但我实际上主张每个微软堆栈的Web服务我已经在这方面使用“糟透了”(尽管大部分 - 虽然 - 我喜欢MS的堆栈)... 我真的很鼓励你看看进入WSCF.Blue ......我认为它可以做你正在寻找的东西 - 或者至少让你更接近......(我在.NET中处理的每个项目都使用它)在哪里可以找到最大的'爆炸'为你的降压是'在单独文件中发射'的选择......然后 - 即使EXACT同一类不止一次发射,它会被覆盖...(假设它们不是'真正'的名称冲突) – dovholuk 2009-10-21 03:07:16

0

以下不按预期工作?

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

我不知道这是否和预期一样,我有一大堆不同类别的像帐户1帐户2等相同的名称这可能是他们的XSD搞砸了=/ – 2009-09-29 14:13:13