如何正确使用 ServiceStack IServiceGateway 方法?
How to use correctly ServiceStack IServiceGateway methods?
IServiceGateway
提供两种主要的同步方式来调用服务。
void IServiceGateway.Publish(object requestDto)
T Send<T>(IReturn<T> request)
我知道 Send()
允许我使用 return 类型,而 Publish()
不行。
现在假设 T
实现了 IReturnVoid
,我应该使用 Publish()
还是 Send()
?
有什么不同?
谢谢。
Publish()
API 应该在语义上用于时间分离的 "One Way" 操作,例如 "Fire and Forget" 请求。
如何处理它们取决于网关的实现,例如在所有服务客户端中 Publish()
将请求 DTO 发送到 ServiceStack 的 /oneway 预定义端点,如果 MQ 已注册,则将其发布到 MQ 而不是执行它,如果未注册 MQ,则行为与调用相同Send()
,除了成功的响应将被丢弃。
虽然它通常用于 IReturnVoid
请求,但它们也可以用于普通请求,例如如果系统支持使用 CreateJob
创建系统作业,客户可以调用 Send()
如果他们希望作业立即执行并且需要等到它完成,或者他们可以调用 Publish()
开始长 - 运行 个他们只想排队在后台执行但不需要等待完成结果的作业。
IServiceGateway
提供两种主要的同步方式来调用服务。
void IServiceGateway.Publish(object requestDto)
T Send<T>(IReturn<T> request)
我知道 Send()
允许我使用 return 类型,而 Publish()
不行。
现在假设 T
实现了 IReturnVoid
,我应该使用 Publish()
还是 Send()
?
有什么不同?
谢谢。
Publish()
API 应该在语义上用于时间分离的 "One Way" 操作,例如 "Fire and Forget" 请求。
如何处理它们取决于网关的实现,例如在所有服务客户端中 Publish()
将请求 DTO 发送到 ServiceStack 的 /oneway 预定义端点,如果 MQ 已注册,则将其发布到 MQ 而不是执行它,如果未注册 MQ,则行为与调用相同Send()
,除了成功的响应将被丢弃。
虽然它通常用于 IReturnVoid
请求,但它们也可以用于普通请求,例如如果系统支持使用 CreateJob
创建系统作业,客户可以调用 Send()
如果他们希望作业立即执行并且需要等到它完成,或者他们可以调用 Publish()
开始长 - 运行 个他们只想排队在后台执行但不需要等待完成结果的作业。