单个服务中的多个 FabricTransportServiceRemotingListeners
Multiple FabricTransportServiceRemotingListeners in a Single Service
我希望能够从集群内的单个无状态服务公开多个 FabricTransportServiceRemotingListeners。我尝试按如下方式注册听众:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[]
{
new ServiceInstanceListener(
serviceContext =>
new FabricTransportServiceRemotingListener(serviceContext, new SqlCategoryCommandService(), new FabricTransportListenerSettings()
{
EndpointResourceName = "CategoryCommandEndpoint"
}), "SqlCategoryCommandService"),
new ServiceInstanceListener(
serviceContext =>
new FabricTransportServiceRemotingListener(serviceContext, new SqlCategoryQueryService(), new FabricTransportListenerSettings()
{
EndpointResourceName = "CategoryQueryEndpoint"
}), "SqlCategoryQueryService")
};
}
然而,当我对由第二个侦听器实现的 ICategoryQueryService
进行代理时,抛出关于未实现的接口方法的异常导致我相信第一个侦听器错误地响应了所有 Proxy 调用。
"Interface id '740213831' is not implemented by object 'TaxonomyService.SqlCategoryCommandService'"
我正在使用以下代码创建代理:
var proxy = ServiceProxy.
Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"));
我描述的情况是否可能?
另一位用户早些时候正确回答了这个问题,但由于某种原因被 mod 删除了,所以为了后代:
是的这是可以的。您只需在创建服务代理时指定监听器名称即可:
var proxy = ServiceProxy.Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"), listenerName: "SqlCategoryQueryService");
我希望能够从集群内的单个无状态服务公开多个 FabricTransportServiceRemotingListeners。我尝试按如下方式注册听众:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[]
{
new ServiceInstanceListener(
serviceContext =>
new FabricTransportServiceRemotingListener(serviceContext, new SqlCategoryCommandService(), new FabricTransportListenerSettings()
{
EndpointResourceName = "CategoryCommandEndpoint"
}), "SqlCategoryCommandService"),
new ServiceInstanceListener(
serviceContext =>
new FabricTransportServiceRemotingListener(serviceContext, new SqlCategoryQueryService(), new FabricTransportListenerSettings()
{
EndpointResourceName = "CategoryQueryEndpoint"
}), "SqlCategoryQueryService")
};
}
然而,当我对由第二个侦听器实现的 ICategoryQueryService
进行代理时,抛出关于未实现的接口方法的异常导致我相信第一个侦听器错误地响应了所有 Proxy 调用。
"Interface id '740213831' is not implemented by object 'TaxonomyService.SqlCategoryCommandService'"
我正在使用以下代码创建代理:
var proxy = ServiceProxy.
Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"));
我描述的情况是否可能?
另一位用户早些时候正确回答了这个问题,但由于某种原因被 mod 删除了,所以为了后代:
是的这是可以的。您只需在创建服务代理时指定监听器名称即可:
var proxy = ServiceProxy.Create<ICategoryQueryService>(new Uri("fabric:/Taxonomy/TaxonomyService"), listenerName: "SqlCategoryQueryService");