WCF中的REST批处理/批量API实现,类似于Facebook API
本文关键字:API 实现 类似于 Facebook 批量 中的 REST 批处理 WCF | 更新日期: 2023-09-27 18:07:28
我正在实现新的REST API方法,它允许以批处理'批量方式调用其他REST API方法。类似于Facebook的https://developers.facebook.com/docs/graph-api/making-multiple-requests
请求的例子:
POST /batch
[
{"method":"GET", "relative_url":"/user/anton"},
{"method":"GET", "relative_url":"/user/vitaliy"}
{"method":"POST", "relative_url":"/user/dan", "body":{name:Dan}}
]
反应的例子:
status 200
[
{"status":"200", "body":{name:"Dan"}},
{"status":"404"},
{"status":"201"}
]
简而言之,批处理方法应该在服务器端逐个调用OTHER方法,并将结果作为结果数组返回。
最简单的解决方案是在服务器端创建。net HttpClient并逐一调用其他WCF方法。
问题是:如何使用WCF基础设施实现这一点,而不通过HttpClient外部调用WCF方法?
这样做的原因是——我不想有网络往返。最完美的解决方案是使用。net反射,但就REST抽象而言,这不是一个好的解决方案
最接近的解决方案是创建WCF消息,包括HttpRequestMessageProperty (URL, Headers, Method, Content-Type),并将其发送到WCF基础设施处理(只是通过HTTP协议发送)(不确定):
Message responseMessage = wcfInsfrastucture.Process(createWcfMessage(url, method,contentType,body));
目前我迷失在WCF样本,和WCF服务器端通道架构。最类似的问题是在发送自定义WCF消息到服务中,但我无法使其与现有配置的服务器端行为一起工作。
相似的问题:
- 向服务发送自定义WCF消息
- https://stackoverflow.com/questions/26049136/generic-way-to-send-wcf-messages-to-different-channels
如何实现这使用WCF基础设施没有调用WCF方法外部通过HttpClient?
我发现唯一的方法是在WCF上实现请求-响应模式。
- 在WCF服务中创建一个入口点,接收一个抽象请求作为参数并返回一个抽象响应。
<OperationContract> function Execute(Request as IRequest) as IResponse
为服务操作创建具体的请求和响应类
为批处理/批量操作创建
CompositeRequest
和CompositeResponse
服务所要做的就是根据请求类型应用业务逻辑。
如果服务接收到CompositeRequest
,它只对所有嵌套请求逐一调用相同的Execute
方法,并将响应聚合到CompositeResponse
中。