我们正在使用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/