OperationContractAttribute.IsOneWay 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示操作是否返回答复消息。
public:
property bool IsOneWay { bool get(); void set(bool value); };
public bool IsOneWay { get; set; }
member this.IsOneWay : bool with get, set
Public Property IsOneWay As Boolean
属性值
如果此方法收到请求消息,但未返回任何答复消息,则为 true
;否则为 false
。 默认值为 false
。
示例
下面的示例演示了一个服务,该服务实现指定三个操作的服务协定。 其中两种方法实现双向操作,即无论返回值是什么,它们都将基础响应消息返回至调用方。 第三种方法实现一个操作,该操作接收一个调用(基础入站消息),但不返回任何基础响应消息。
[ServiceContract]
public class OneAndTwoWay
{
// The client waits until a response message appears.
[OperationContract]
public int MethodOne (int x, out int y)
{
y = 34;
return 0;
}
// The client waits until an empty response message appears.
[OperationContract]
public void MethodTwo (int x)
{
return;
}
// The client returns as soon as an outbound message
// is queued for dispatch to the service; no response
// message is generated or sent.
[OperationContract(IsOneWay=true)]
public void MethodThree (int x)
{
return;
}
}
注解
使用 IsOneWay 属性指示操作不返回答复消息。 这种类型的操作对通知或事件样式通信十分有用,特别是双向通信。 如果不等待基础响应消息,则单向操作的调用方在处理请求消息时无法直接检测错误。 (使用可靠的信道和单向操作的服务应用程序可在信道级别检测消息传递失败。 有关详细信息,请参阅 Reliable Sessions Overview.)
在面向双工(或双向)服务的应用程序中,客户端和服务器相互独立地通信,并且客户端信道可使用其方法中的 IsOneWay 属性指示服务可单向调用客户端(该客户端可作为事件处理)。 这不会返回调用或生成消息,因为该服务不需要任何响应消息。
如果 IsOneWay 属性设置为 false
(默认值),即使返回 void
的方法也会生成答复消息。 在此种情况下,基础结构将创建并发送一条空消息,以向调用方指示该方法已返回内容。 (使用此方法可使基础结构将 SOAP 错误发送回 client.) 设置IsOneWaytrue
是取消创建和调度响应消息的唯一方法。
单向方法不得返回一个值或具有 ref
或 out
参数;否则将引发 System.InvalidOperationException 异常。
指定操作是单向操作,只表示它没有响应消息。 如果无法建立连接、出站消息非常大或该服务无法足够快地读取入站信息,则可能会阻止。 如果客户端要求非阻止调用,则会生成 AsyncPattern 操作。 有关详细信息,请参阅单向服务和使用 WCF 客户端访问服务。