2011-07-22 15 views
0

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

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

代理类是否仍然在不同的系统中运行?那么另一端仍然知道合同中的类型?

+0

WCF根据配置设置通信协议。它不会自行决定。 –

回答

1

听起来像是由应用层协议,你的意思是数据是如何的方式SE rialized /编码。您可以创建自己的编码器。但通常编码被认为是传输协议的一部分。

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

定制XSD可如果换成标准XmlSerializer默认DataContractSerializer(通过使用XmlSerializerFormatAttribute),你必须完全控制XML序列化使用,你可以强制你的类序列化到需要通过在提供标准的XML序列化工具的任何XSD .NET框架(属性,IXmlSerializable

独立区域是REST,但其余部分不由WSDL描述(至少不在WCF中,因为它不支持WSDL 2.0)并且不为REST服务生成代理。

Btw。默认的WCF TCP只有WCF到WCF - 它有它自己的消息格式和编码。

+0

+1这是我不清楚的另一个方面。我没有意识到我的问题背后有两种机制。谢谢 –

1

是的,开箱即用WCF假定您使用的是SOAP。

可以使用WebGet属性,如修改从XML到JSON方法调用的结果:

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

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

或者,如果你不想这样,你可以使用REST入门套件WCF,它实现的,而不是SOAP/WSDL REST:http://www.asp.net/downloads/starter-kits/wcf-rest

+0

啊,我明白了。所以它是一个'[Attribute]'。我阅读了“WCF的基础知识”,但在这方面还不清楚。谢谢@Roy Dictus –