WCF消息可靠性与有序传递
WCF作为一项通讯技术,必须保证传输的可靠性与 消息的可靠性
传输可靠性:指的是点对点可靠性,确保数据包按顺序到达。它不受网络等因素的影响
消息可靠性:指提供了消息端对端的保证,确保消息的顺序无误。如果传输失败,它还能提供重试功能自动处理网络阻塞、消息缓存、流控制,根据具体情况适时调整发送消息数。它还能通过对连接的验证管理连接自身,并在不需要的时候清除连接
理论上,WCF服务的实现与服务契约的定义与它使用的绑定以及属性无关。实际上,服务处理消息以及契约定义都可能与消息的有序传递有关。在WCF中使用DeliveryRequirementsAttribute来对服务或者契约应用这种约束。
[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class, AllowMultiple=true)]
public sealed class DeliveryRequirementsAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute
{
private Type contractType;
private QueuedDeliveryRequirementsMode queuedDeliveryRequirements;
private bool requireOrderedDelivery;
}
public sealed class DeliveryRequirementsAttribute : Attribute, IContractBehavior, IContractBehaviorAttribute
{
private Type contractType;
private QueuedDeliveryRequirementsMode queuedDeliveryRequirements;
private bool requireOrderedDelivery;
}
如果 DeliveryRequirementsAttribute 应用于契约上,则实现此种契约的服务都应用可靠的有序传递的约束。如:
[ServiceContract]
[DeliveryRequirements(RequireOrderedDelivery = true)]
public interface ICalculator1
{
[OperationContract]
int Add(int x, int y);
}
如果应用于实现某契约类型的服务,则只有此服务应用可靠的有序传递的约束。
[DeliveryRequirements(RequireOrderedDelivery = true)]
publicclass CalculationService : ICalculator1
{
/**/
}
如果实现契约的服务实现多个服务契约,也可以通过DeliveryRequirements指定只有支持某种契约终结点的服务才应
用这种可靠的有序传递的约束。如下:
[DeliveryRequirements(RequireOrderedDelivery = true, TargetContract = typeof (ICalculator1))]
public class CalculationService : ICalculator1, ICalculator2
{
/**/
}
public class CalculationService : ICalculator1, ICalculator2
{
/**/
}
RequireOrderedDelivery默认为False,如果在接口或者服务类上使用Delivery却不设置,RequireOrderedDelivery
则也是不会开启有序传递的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构