gpt4 book ai didi

c# - 了解 WCF IsOneWay、CalbackContracts 和 Duplex - 我的假设是否正确?

转载 作者:行者123 更新时间:2023-11-30 14:27:30 26 4
gpt4 key购买 nike

我一直在阅读和试验 WCF,并试图以简单的方式理解其工作原理。所以我的问题是验证和验证我认为正确的内容,但我需要确定:在典型的发布-订阅双工服务中。

1:服务契约 - 这是客户端必须与服务建立的通信路径。

2: Callback contract - 这是返回给客户端的通信方式。

3:在回调协定上设置 IsOneWay = true 属性意味着客户端不会从服务器返回任何内容。

4: 在 ServiceContract 上设置 IsOneWay = true 意味着服务器不会从客户端返回任何东西。

5: void return 方法仍然发送回复,如果IsOneWay=true,回复被忽略,如果为false 错误和soap 信息可以获得。 ^

为简洁起见,我查看了以下内容,然后查看了一些^ⁿ:

Understanding WCF

WCF issue with using IsOneWay attribute

Understanding WCF Client to Server

https://msdn.microsoft.com/en-us/library/system.servicemodel.operationcontractattribute.isoneway(v=vs.110).aspx

最佳答案

看看this tutorial对于 WCF,这 MSDN Article关于双工服务。

你的定义差不多了,我自己将上面的定义为:

服务契约 - 定义 Web 服务向客户端公开的操作的接口(interface)。

回调契约(Contract) - 类似于服务契约(Contract),但正如您所注意到的,是针对客户端的。这定义了 Web 服务如何作为单独的调用与客户端通信。 (与简单地从服务契约(Contract)中的调用返回数据相反)。这些通常用于从长时间运行的网络服务调用或事件信号中返回值。

IsOneWay = true 在服务契约(Contract)上 - 这指定服务操作不返回任何值,因此客户端将简单地“触发并忘记”。对 web 服务的调用在完成之前不会阻塞客户端,而是立即返回。因此,使用 IsOneWay = true 的操作只能返回 void。

IsOneWay = true 在回调契约(Contract)上 - 这与在服务契约(Contract)上的非常相似。当服务器调用回调契约上的操作时,它会立即返回,直到操作完成才阻塞。

Void 返回 - 如果 IsOneWay 未设置为 true,调用仍将阻塞,直到操作完成,SOAP 消息仍将返回,但没有数据(除非您传回故障)。如果您希望实际返回值,您可以像使用普通方法那样做,设置操作的返回类型,即

[ServiceContract]
public interface IService
{
[OperationContract]
DateTime GetDateTime();
}

public class Service : IService
{
public DateTime GetDateTime()
{
return DateTime.Now;
}
}

或者,您可以创建一个双工服务,带有回调协定,并且 IsOneWay = true

[ServiceContract(CallbackContract = typeof(ICallbackService))]
public interface IService
{
[OperationContract(IsOneWay = true)]
void GetDateTime();
}

public interface ICallbackService
{
[OperationContract(IsOneWay = true)]
void GetDateTimeCompleted(DateTime dateTime);
}

public class Service : IService
{
public void GetDateTime()
{
// Do long action here.
...
Callback.GetDateTimeCompleted(DateTime.Now);
}

ICallbackService Callback
{
return OperationContext.Current.GetCallbackChannel<ICallbackService>();
}
}

使用这个方法:

  1. 对网络服务 GetDateTime() 操作的调用将立即返回
  2. “超长操作”将在服务器上执行
  3. 客户端的 GetDateTimeCompleted(DateTime dateTime) 将在服务器完成时触发。

请注意,上面的双工示例并不完整,您需要确保正确处理诸如 session 之类的事情。

您绝对是在正确的轨道上。我建议遵循上面链接的教程(以及您找到的任何其他教程)并进行试验。您很快就会明白什么是可能的。

关于c# - 了解 WCF IsOneWay、CalbackContracts 和 Duplex - 我的假设是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32613623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com