使用 HTTP、TCP 或命名管道的同步方案

本主题介绍不同同步请求/回复方案的活动和传输,以及使用 HTTP、TCP 或命名管道的单线程客户端。 有关多线程请求的详细信息 ,请参阅使用 HTTP、TCP 或 Named-Pipe 的异步方案

同步请求与回复无错误

本部分介绍具有单线程客户端的有效同步请求/回复方案的活动和传输。

客户

与服务终结点建立通信

构造并打开了一个客户端。 对于上述每个步骤,环境活动(A)分别传输到“构造客户端”(B)和“开放客户端”(C)活动。 对于转换到的每个活动,都将挂起环境活动,直到传回消息为止,即直到执行 ServiceModel 代码为止。

向服务终结点发出请求

环境活动转换到“ProcessAction”(D) 活动。 在此活动中,发送请求消息,并接收响应消息。 当控件返回到用户代码时,活动将结束。 由于这是同步请求,因此环境活动将暂停,直到控制返回。

关闭与服务终结点的通信

客户端的关闭活动 (I) 是从环境活动中创建的。 这与新建和打开活动完全相同。

服务器

设置服务主机

ServiceHost 的新建和打开活动(N 和 O)是从环境活动 (M) 中创建的。

侦听器活动 (P) 是从为每个侦听器打开一个 ServiceHost 的活动中创建的。 侦听器活动等待接收和处理数据。

在网络上接收数据

当数据到达网络时,如果“ReceiveBytes”活动 (Q) 尚不存在,则创建该活动以处理接收到的数据。 此活动可针对连接或队列中的多个消息重用。

如果 ReceiveBytes 活动有足够的数据来形成 SOAP 动作消息,则会启动 ProcessMessage 活动(R)。

在活动 R 中,将处理消息标头,并验证 activityID 标头。 如果存在此标头,则活动 ID 设置为 ProcessAction 活动;否则,将创建一个新 ID。

处理调用时,将创建 ProcessAction 活动 (S) 并转换到该活动。 此活动在完成与传入消息相关的所有处理时结束,包括执行用户代码(T),并发送响应消息(如果适用)。

关闭服务主机

ServiceHost 的关闭活动 (Z) 是从环境活动中创建的。

显示同步场景的图示:HTTP、TCP 或命名管道。

在 <A: 名称>中, A 是描述上一文本和表 3 中的活动的快捷符号。 Name 是活动的缩短名称。

如果 propagateActivity=true,则客户端和服务上的进程的操作具有相同的活动 ID。

返回错误的同步请求/答复

与上一方案的唯一区别是 SOAP 错误消息作为响应消息返回。 如果 propagateActivity=true为 SOAP 错误消息,则请求消息的活动 ID 将添加到 SOAP 错误消息中。

不返回错误的同步单向方案

与第一种方案的唯一区别是,不会将消息返回到服务器。 对于基于 HTTP 的协议,状态(有效或错误)仍会返回到客户端。 这是因为 HTTP 是唯一具有作为 WCF 协议堆栈一部分的请求响应语义的协议。 由于 TCP 处理在 WCF 中隐藏,因此不会向客户端发送确认。

返回错误的同步单向方案

如果在处理消息时发生错误(Q 或更高),则不会向客户端返回通知。 这与“不返回错误的同步单向方案”方案完全相同。 如果想要收到错误消息,则不应使用 One-Way 方案。

双工

与前面的方案不同的是,客户端充当服务,在该服务中创建 ReceiveBytes 和 ProcessMessage 活动,类似于异步方案。