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中的REST批处理/批量API实现,类似于Facebook API

如何实现这使用WCF基础设施没有调用WCF方法外部通过HttpClient?

我发现唯一的方法是在WCF上实现请求-响应模式。

  1. 在WCF服务中创建一个入口点,接收一个抽象请求作为参数并返回一个抽象响应。
例如,

<OperationContract> function Execute(Request as IRequest) as IResponse
  • 为服务操作创建具体的请求和响应类

  • 为批处理/批量操作创建CompositeRequestCompositeResponse

  • 服务所要做的就是根据请求类型应用业务逻辑。

    如果服务接收到CompositeRequest,它只对所有嵌套请求逐一调用相同的Execute方法,并将响应聚合到CompositeResponse中。