WCF如何建立应用程序级协议?

时间:2011-07-22 14:16:08

标签: .net wcf

我的理解是WCF将服务契约与传输协议分离,以允许不同系统之间的通信。我的问题是,WCF如何确定/帮助更高级别的通信协议(应用程序级别而不是传输级别)?

因此,在TCP WCF场景中,一端不是WCF,WCF是否只假设SOAP?或者,我们可以覆盖并指定带有[Attribute]的自定义XSD吗?

代理类是否仍适用于不同的系统?那么另一端是否仍然知道合同中的类型?

2 个答案:

答案 0 :(得分:1)

是的,开箱即用WCF假设你正在使用SOAP。

您可以使用WebGet属性将方法调用的结果从XML修改为JSON,如下所示:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string MyMethod() { ... }

您还可以使用ODCF,使用WCF数据服务库和项目类型:http://msdn.microsoft.com/en-us/library/cc668792.aspx

或者如果您不希望这样,您可以使用REST Starter Kit for WCF,它实现REST而不是SOAP / WSDL:http://www.asp.net/downloads/starter-kits/wcf-rest

答案 1 :(得分:1)

听起来像应用程序级协议,你的意思是数据的序列化/编码方式。您可以创建自己的编码器。但通常编码被认为是传输协议的一部分。

合同中的类型意识是通过WSDL完成的。如果要将新协议(传输/编码)描述为WSDL的一部分,则必须为WSDL创建一些自定义扩展,并为WCF创建自定义导出/导入器扩展。同样在WCF的情况下,服务和客户端都需要使用新的传输/编码访问程序集。

如果您使用标准DataContractSerializer(使用XmlSerializer)交换默认XmlSerializerFormatAttribute,您可以使用自定义XSD,您可以完全控制XML序列化,并且可以强制您的类序列化为.NET Framework中提供的标准XML序列化工具所需的任何XSD(属性,IXmlSerializable

单独的区域是REST,但WSDL不描述休息(至少不在WCF中,因为它不支持WSDL 2.0),并且不为REST服务生成代理。

顺便说一下。默认WCF TCP只是WCF到WCF - 它有自己的消息格式和编码。