wcf - SOA,请求/响应服务层,接受和返回请求/响应与数组还是请求/响应?

标签 wcf web-services architecture soa

我们正在使用WCF实现Request/Response Service Layer,其中每个请求都继承自基本Request类,每个响应都继承自Response类。

该服务具有单个Process方法,该方法接受一个Request并返回一个Response。

// Messages contract
public abstract class Request {}
public abstract class Response {}

// Operation contract
Response Process(Request request);

但是,我们团队的某些成员认为,运营契约(Contract)应该接受并返回一系列请求/响应,而不是期望和返回单个请求/响应的运营契约(Contract)。
// Operation contract
Response[] Process(Request[] requests);

我个人认为它在语义上不正确,并且在需要一次(可能成批处理)一次处理一组相关请求的情况下,可以考虑引入BatchRequest和BatchResponse消息。
public class BatchRequest : Request
{
    public Request[] Requests {get;set;}
}
public class BatchResponses : Response
{
    public string BatchReference {get; set;} // for example
    public Response[] Responses {get;set;}
}

对我来说,接受并返回数组似乎不正确,这当然是我从未见过的使用过的模式。还有其他问题吗?如果是,那是什么?

有人认为,接受/返回数组将使我们不必再引入批处理请求(如上图所示),因此您仍然可以在数组中发送单个请求。

谢谢

最佳答案

首先,数组会增加不必要的复杂性。保持简单(和愚蠢)。

例如。应该如何处理错误?如果请求#1失败,则是否应继续执行请求#2和#3?错误应如何报告?

通过创建所有请求数组,您的同事想解决什么问题?如果性能出色,它闻起来像是过早的优化。还有其他几种方法可以提高性能,但是在确实需要执行任何操作之前,不要执行任何操作。

如果要释放客户端而不是等待结果,请切换到异步客户端。

关于wcf - SOA,请求/响应服务层,接受和返回请求/响应与数组还是请求/响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236136/

相关文章:

caching - 如何计算数据和指令缓存的缺失率

java - 我应该拆分 Spring 上下文文件吗

visual-studio-2010 - 类和方法报告

wcf - 如果我在AddObject上添加数据,如何返回ID?

c# - OData 和 WCF : Unable to perform POST, 放置和删除

web-services - 依赖于 SOAP API 的服务设计发生了很大变化

java - Jhipster gateway 需要完全身份验证才能访问此资源

wcf - 当我有证书身份时,如何在代码中创建端点地址?

asp.net - 在 wcf 服务中使用 aspNetCompatibilityEnabled ="false"获取 HttpContext.Current

java - 通过 Apache Camel 调用外部 Web 服务