c# - WCF 有多少种契约类型?

标签 c# wcf

<分区>

我最近遇到了一个问题“WCF 有多少种契约类型”。我知道树契约类型:ServiceContractDataContractOperationContract,但有人告诉我有四种。您能否解释一下 WCF 还有哪些其他类型的契约(Contract)?

最佳答案

WCF 中有四种契约:

  1. Data Contract - 它描述了数据的格式并定义了数据应如何序列化/反序列化。要为您的服务定义一个DataContract,您可以使用DataContractDataMember。参见 DataContract on MSDN

  2. 服务契约(Contract) - 它描述了服务公开的操作。它还可以描述消息交换模式。可以使用 [ServiceContract] 和 [OperationContract] 属性定义服务契约。参见 ServiceContract on MSDN

  3. Message Contract - 它让我们可以控制 SOAP 消息。如果您只使用数据协定,所有数据都将在 SOAP 消息体中,但如果您需要控制/访问 SOAP 消息 header ,您可以使用 MessageContract。可以使用 MessageContract 属性将消息协定应用于类型。使用 MessageHeaderMessageBodyMember 属性可以将自定义 header 和正文包含到消息中。参见 MessageContract on MSDN

  4. Fault Contract - 这是一个特殊的契约(Contract),用于让客户知道服务端出现问题。如果抛出异常,它就无法按原样到达客户端。 WCF 处理它并使用 SOAP Fault Contract 将错误消息传送给客户端。您还可以为操作定义一个故障契约(Contract)。您需要使用 [FaultContract(typeof(YouCustomFault))]YouCustomFault 以及 DataContractDataMember 来装饰您的操作属性。参见 FaultContract on MSDN

并且没有OperationContract这样的契约,它只是一个定义服务契约操作的属性。

关于c# - WCF 有多少种契约类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23117136/

相关文章:

c++ - 类 WCF 的 native C++ 库

c++ - 为什么第一次工作后调用 LoadLibrary 会失败并显示 'The specified module could not be found'

c# - MonoTouch 不支持在设备上运行时打开 Web 服务连接的 OpenAsync 方法(在模拟器上运行)

c# - 我们如何将视频实时编码为 mp4 并在 ASP.NET 中进行流式传输

c# - 一个简单数据库的初学者问题

c# - 将持久数据保存在内存中

c# - WCF - 在没有客户端调用的情况下发送回调

c# - 如何为类库包含 log4net?

c# - 检索用于 Jenkins 构建的程序集版本

c# - 使用 WCF 异步有好处吗?