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

.net WCF如何建立应用程序级协议?,.net,wcf,.net,Wcf,我的理解是,WCF将服务契约与传输协议分离,以允许不同系统之间的通信。我的问题是,WCF如何确定/帮助更高级别的通信协议(应用程序级别而不是传输级别) 那么,在一个一端不是WCF的TCP WCF场景中,WCF只是假设SOAP吗?或者,我们可以用[属性]覆盖并指定自定义XSD吗 代理类是否仍然在不同的系统中运行?那么另一端仍然知道合同中的类型吗?是的,现成的WCF假设您正在使用SOAP 您可以使用WebGet属性将方法调用的结果从XML修改为JSON,如下所示: [OperationContrac

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

那么,在一个一端不是WCF的TCP WCF场景中,WCF只是假设SOAP吗?或者,我们可以用
[属性]
覆盖并指定自定义XSD吗


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

是的,现成的WCF假设您正在使用SOAP

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

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string MyMethod() { ... }
您还可以通过使用WCF数据服务库和项目类型使用OData:


或者,如果您不想这样做,您可以使用用于WCF的REST初学者工具包,它实现REST而不是SOAP/WSDL:

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

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

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

单独的区域是REST,但REST不由WSDL描述(至少不在WCF中,因为它不支持WSDL2.0),并且不会为REST服务生成代理


顺便说一句,默认WCF TCP仅为WCF到WCF-它有自己的消息格式和编码。

WCF根据配置设置通信协议。它不是自己决定的。啊,我明白了。因此它是一个
[属性]
。我读过“WCF的ABC”,但不清楚这方面的内容。谢谢@Roy Dictus+1这是我不清楚的另一个方面。我不知道我的问题背后有两个机制。谢谢