Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF何时使用MessageHeader而不是在函数参数中传递变量_C#_Wcf_Messagecontract - Fatal编程技术网

C# WCF何时使用MessageHeader而不是在函数参数中传递变量

C# WCF何时使用MessageHeader而不是在函数参数中传递变量,c#,wcf,messagecontract,C#,Wcf,Messagecontract,我正在阅读有关MessageContract和MessageHeader的文章,试图了解在MessageHeader中发送一些信息而不是将其用作函数参数的用例?MessageContract和MessageHeader提供的消息控制级别低于DataContract和DataMember。如果您使用webHttpBinding或basicHttpBinding,它还提供了一种创建SOAP头的方法。 如果您在WCF服务中使用流功能,那么除了流本身之外,使用MessageHeader是传递数据的唯一方

我正在阅读有关MessageContract和MessageHeader的文章,试图了解在MessageHeader中发送一些信息而不是将其用作函数参数的用例?

MessageContract和MessageHeader提供的消息控制级别低于DataContract和DataMember。如果您使用webHttpBinding或basicHttpBinding,它还提供了一种创建SOAP头的方法。 如果您在WCF服务中使用流功能,那么除了流本身之外,使用MessageHeader是传递数据的唯一方法。

您可以在此

中阅读有关消息契约的更多信息。消息契约和消息头是一些高级概念,大多数人永远不需要使用。它们主要用于互操作性场景中,您需要与第三方服务进行通信,第三方服务希望数据采用某种格式(即,标题中的某些参数)

在消息头中传递某些参数的其他可能情况:

  • 在消息检查器和WCF中的其他扩展点中可以很容易地访问头(因为头总是被缓冲的),因此如果您想使用其中的一些来进行一些验证(例如,一些身份验证决策),您可能希望在头中包含参数
  • 正如@Vasile所提到的,如果您想进行流式传输,由于标头始终处于缓冲状态,因此在读取/使用(流式)正文之前,可以使用标头向操作传递一些附加信息

很抱歉,我很难理解这个概念。在消息头而不是消息体中发送操作和TransactionDateTime的用例是什么?在邮件正文中发送此信息有任何限制吗?