WCF在.net 2010和任何类型的客户端之间
本文关键字:类型 客户端 之间 任何 net 2010 WCF | 更新日期: 2023-09-27 17:54:00
我是一个完全的新手与WCF工作,但已经放在一个项目,需要它。虽然没有作为要求给出,但我希望这个服务可以与任何客户端无缝地工作,而不管它是用什么技术编写的(例如Java)。
基本上,客户端将发送给我一个XML块,我将验证和处理它。如果一切正常,我将返回一个包含两个字段的XML文档(一个退出代码和一条消息)。
如果我使用数据合约(1个只写和2个只读属性),这将做的伎俩或有更多的比我看到的。
谢谢!
粘土数据合约不是"解决方案";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)开始,你就会很好。