【发布时间】:2017-07-26 17:02:26
【问题描述】:
过去几周我一直在从云服务迁移到 Service Fabric,并且在使用 2 个服务之间的远程处理时遇到了一些障碍。
我一直在使用有关远程服务的官方文档和示例代码,特别是我试图让此处概述的示例正常工作:
我有 2 项服务。一个名为“RemoteService”,另一个名为“CallerService”。两者都源自默认的无状态服务项目。
在 "RemoteService" 和 "CallerService" 项目中,我都添加了以下接口来描述它们之间的服务契约:
public interface IMyService : IService
{
Task<string> HelloNameAsync(string name);
}
在 "RemoteService" 我在 RemoteService 类中创建了关联方法
public Task<string> HelloNameAsync(string name)
{
return Task.FromResult("Hello " + name + "!");
}
我还使用以下内容覆盖 CreateServiceInstanceListeners
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}
在我的 “CallerService” 中,当我尝试连接时,使用以下内容调用“RemoteService”:
IMyService helloNameClient = ServiceProxy.Create<IMyService>(new Uri("fabric:/Application/RemoteService"));
string message = await helloNameClient.HelloNameAsync("Luke");
我得到了这个异常
InnerException = {"Interface id '1994370306' is not implemented by object 'RemoteService.RemoteService'"}
我已经用细齿梳仔细检查了这个样品,并且确信我已经将所有东西都准备好了。我已经阅读了有关设置端点并将您的服务注册到服务目录中的信息,但据我了解,这些是针对外部服务的,并且远程处理文档没有提到需要这样做。
更新:
RemoteService 类的声明方式如下:
internal sealed class RemoteService : StatelessService, IMyService
更新 2
以下是这两个服务的 Settings.xml 的样子。这些是项目开箱即用的默认设置。我没有添加或删除任何东西。我还想指出,我在本地服务结构上运行所有这些。
<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<!-- Add your custom configuration sections and parameters here -->
<!--
<Section Name="MyConfigSection">
<Parameter Name="MyParameter" Value="Value1" />
</Section>
-->
</Settings>
【问题讨论】:
-
我们可以看看你是如何声明 RemoteService 类的吗?两种服务的 Settings.xml 也是如此。
-
是的,我刚刚添加了更新。
-
刚刚也添加了 Settings.xml 文件。
标签: c# azure azure-service-fabric