2011-05-01 76 views
1

我是一个完整的工作与WCF的工作,但已被放在一个需要它的项目。尽管没有给出这个要求,但我希望这个服务能够与任何客户端无缝地工作,而不管它使用哪种技术(例如Java)。.NET 2010和任何类型的客户端之间的WCF

基本上,客户端会向我发送一块XML,我将验证和处理。如果一切正常,我将返回一个带有2个字段的XML文档(退出代码和消息)。

如果我使用DataContracts(具有1个只写和2个只读属性)是否可以做到这一点,或者是我看到的更多。

非常感谢!

粘土

回答

1

DataContracts不是“解决方案”; DC是消息序列化的一种可能方法。是否要使用DC取决于XML必须是什么样子,或者看起来像什么,以及您希望或需要如何将程序内存中的对象映射到消息(xml文档或片段)。

特别是,如果您想要或需要消息中的xml属性,那么DataContracts可能不是您的选择。

DC可以支持这种输入消息:

<request> 
    <flavor>7</flavor> 
    <param>eiueuie</param> 
</request> 

通知所有数据被存储为XML元素。 DataContract不会为这种信息的工作:

<request flavor='7'> 
    <param>eiueuie</param> 
</request> 

...其中消息数据的任何存储在XML属性。如果你想使用XML属性,那么你可能想要使用XML序列化器。如果你不在乎某种方式,那么DC可能会很好。

但是,Xml序列化程序无法将专用字段或属性映射到XML元素,而DC Can。所以,如果你的对象模型需要,那么你不能使用XML序列化器,你应该使用DC。

要了解有关DC和XMLS之间权衡的更多信息,read this


说了这么多之后,决定是否使用DC只是您设计的一部分。您还需要决定是否需要完整的SOAP Envelope支持(允许使用诸如消息签名等等),还是需要更简单的“REST”消息格式(可能更好地称为“普通旧XML”)。

然后有像实例化,托管和激活(使用IIS或自主?),日志/审计,安全(身份验证和授权)等等。

所以,WCF可以为你工作,对于任何类型的客户端,但是选择使用DataContracts还是不行,只是一个难题。

+0

非常感谢Cheeso ...我将要返回这个:并且带有许多属性的元素,所以看起来像DataContract不会去做的伎俩。 – PseudoToad 2011-05-02 20:49:48

0

数据契约只是传输数据的定义 - 它不是域对象,所以决定什么是只读是没有意义的。客户端将反序列化响应,并且您将无法控制其对数据的处理=客户端无论如何都可以更改响应。 WCF管道中的任何处理组件都可以更改响应。

只需从DataContract和基本的SOAP服务(basicHttpBinding)或基本的REST服务(webHttpBinding + webHttpBehavior)开始,你就会好起来的。

+0

谢谢拉迪斯拉夫。我个人宁愿选择华盛顿特区,但如果我这样做,我恐怕将会有更多的工作要做。 – PseudoToad 2011-05-02 20:53:05