【发布时间】:2021-01-16 15:25:16
【问题描述】:
通常,使用recommended 创建实现IHttpClient 或IHttpClientFactory 的包装器。同时,一些奥尔良samples 表示可以按需创建HttpClient 实例并直接从grain 中使用。
问题
- 我应该将 Orleans 服务创建为
IHttpClient的包装器还是直接从 grain 调用 HttpClient? - 如果我需要一个包装器,这个实现就足够了吗?
-
GrainService和GrainServiceClient有什么区别?
public interface IRemoteGrainService : IGrainService
{
Task<T> Get<T>(string source) where T : new();
}
public class RemoteGrainService : GrainService, IRemoteGrainService
{
private IGrainFactory _grainFactory;
private HttpClient _remoteService;
public RemoteGrainService(
IServiceProvider services,
IGrainIdentity id,
Silo silo,
ILoggerFactory
loggerFactory,
IGrainFactory grainFactory) : base(id, silo, loggerFactory)
{
_grainFactory = grainFactory;
}
public override Task Init(IServiceProvider serviceProvider)
{
return base.Init(serviceProvider);
}
public override async Task Start()
{
_remoteService = new HttpClient();
await base.Start();
}
public override Task Stop()
{
_remoteService.Dispose();
return base.Stop();
}
public Task<T> Get<T>(string source) where T : new()
{
return JsonConvert
.DeserializeObject<T>(
await _client.GetAsync(source))
.Content
.ReadAsStringAsync);
}
}
【问题讨论】:
标签: orleans