WCF在.net 2010和任何类型的客户端之间

本文关键字:类型 客户端 之间 任何 net 2010 WCF | 更新日期: 2023-09-27 17:54:00

我是一个完全的新手与WCF工作,但已经放在一个项目,需要它。虽然没有作为要求给出,但我希望这个服务可以与任何客户端无缝地工作,而不管它是用什么技术编写的(例如Java)。

基本上,客户端将发送给我一个XML块,我将验证和处理它。如果一切正常,我将返回一个包含两个字段的XML文档(一个退出代码和一条消息)。

如果我使用数据合约(1个只写和2个只读属性),这将做的伎俩或有更多的比我看到的。

谢谢!

粘土

WCF在.net 2010和任何类型的客户端之间

数据合约不是"解决方案";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可以。因此,如果您的对象模型需要这样做,那么您就不能使用XML Serializer,而应该使用DC。

要了解有关DC和xml之间权衡的更多信息,请阅读本文。


说了这么多,决定是否使用DC只是你设计的一部分。您还需要决定是否需要完整的SOAP信封支持(它允许消息签名等),或者是否需要更简单的"REST"消息格式,这可能更适合称为"普通旧XML"。

还有诸如实例化、托管和激活(使用IIS还是自托管?)、日志/审计、安全(身份验证和授权)等。

因此,WCF可以为您工作,适用于任何类型的客户端,但是选择是否使用DataContracts只是拼图的一部分。

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

DataContract和基本SOAP服务(basicHttpBinding)或基本REST服务(webHttpBinding + webHttpBehavior)开始,你就会很好。