0

我不知道如何检查我是对还是错,所以你的帮助会很大。

A.据我了解,IsOneWay=true = 客户端不想等待方法结束。所以服务会在他想要的时候执行这个方法。但是,在某些情况下,服务是否会使用多线程来执行该方法?

B.当我使用 ConcurrencyMode.Multiple 时,使用 IsOneWay=true 和 IsOneWay=false 有什么区别。

4

2 回答 2

3

ConcurrencyMode 和 Messaging Pattern 并没有那么直接相关。

IsOneWay影响客户端和服务器的交互方式。

ConcurrencyMode是服务器端问题,客户端不知道此设置。

于 2012-04-27T13:50:13.163 回答
1

来自:http: //msdn.microsoft.com/en-us/library/ms751496.aspx

根据定义,HTTP 是一种请求/响应协议;发出请求时,会返回响应。即使对于通过 HTTP 公开的单向服务操作也是如此。调用该操作时,服务会在服务操作执行之前返回 HTTP 状态代码 202。此状态码表示请求已被接受处理,但处理尚未完成。调用该操作的客户端会阻塞,直到它收到来自服务的 202 响应。当使用配置为使用会话的绑定发送多个单向消息时,这可能会导致一些意外行为。此示例中使用的 wsHttpBinding 绑定默认配置为使用会话来建立安全上下文。默认情况下,会话中的消息保证按照它们发送的顺序到达。因此,当发送会话中的第二条消息时,直到处理完第一条消息后才对其进行处理。这样做的结果是,在前一条消息的处理完成之前,客户端不会收到消息的 202 响应。因此,客户端似乎会阻止每个后续操作调用。为避免此行为,此示例将运行时配置为同时将消息分派到不同的实例进行处理。该示例将 InstanceContextMode 设置为 PerCall,以便每个消息都可以由不同的实例处理。ConcurrencyMode 设置为 Multiple 以允许多个线程一次分派消息。当发送会话中的第二条消息时,在处理完第一条消息之前不会对其进行处理。这样做的结果是,在前一条消息的处理完成之前,客户端不会收到消息的 202 响应。因此,客户端似乎会阻止每个后续操作调用。为避免此行为,此示例将运行时配置为同时将消息分派到不同的实例进行处理。该示例将 InstanceContextMode 设置为 PerCall,以便每个消息都可以由不同的实例处理。ConcurrencyMode 设置为 Multiple 以允许多个线程一次分派消息。当发送会话中的第二条消息时,在处理完第一条消息之前不会对其进行处理。这样做的结果是,在前一条消息的处理完成之前,客户端不会收到消息的 202 响应。因此,客户端似乎会阻止每个后续操作调用。为避免此行为,此示例将运行时配置为同时将消息分派到不同的实例进行处理。该示例将 InstanceContextMode 设置为 PerCall,以便每个消息都可以由不同的实例处理。ConcurrencyMode 设置为 Multiple 以允许多个线程一次分派消息。这样做的结果是,在前一条消息的处理完成之前,客户端不会收到消息的 202 响应。因此,客户端似乎会阻止每个后续操作调用。为避免此行为,此示例将运行时配置为同时将消息分派到不同的实例进行处理。该示例将 InstanceContextMode 设置为 PerCall,以便每个消息都可以由不同的实例处理。ConcurrencyMode 设置为 Multiple 以允许多个线程一次分派消息。这样做的结果是,在前一条消息的处理完成之前,客户端不会收到消息的 202 响应。因此,客户端似乎会阻止每个后续操作调用。为避免此行为,此示例将运行时配置为同时将消息分派到不同的实例进行处理。该示例将 InstanceContextMode 设置为 PerCall,以便每个消息都可以由不同的实例处理。ConcurrencyMode 设置为 Multiple 以允许多个线程一次分派消息。此示例将运行时配置为同时将消息分派到不同的实例进行处理。该示例将 InstanceContextMode 设置为 PerCall,以便每个消息都可以由不同的实例处理。ConcurrencyMode 设置为 Multiple 以允许多个线程一次分派消息。此示例将运行时配置为同时将消息分派到不同的实例进行处理。该示例将 InstanceContextMode 设置为 PerCall,以便每个消息都可以由不同的实例处理。ConcurrencyMode 设置为 Multiple 以允许多个线程一次分派消息。

于 2012-04-27T15:31:42.880 回答