Serviço Remoto do Service Fabric
Estive migrando dos Serviços em Nuvem para o Service Fabric nas últimas semanas e encontrei alguns obstáculos usando o Remoting entre dois serviços.
Eu tenho usado a documentação oficial e o código de exemplo no Service Remoting e, em particular, estou tentando fazer com que o exemplo descrito aqui funcione:
Eu tenho 2 serviços. Um é nomeado"RemoteService" e o outro é nomeado"CallerService". Ambos são derivados de um projeto de serviço sem estado padrão.
Nos dois"RemoteService" e"CallerService" projetos Adicionei a seguinte interface para descrever o contrato de serviço entre eles:
public interface IMyService : IService
{
Task<string> HelloNameAsync(string name);
}
No"RemoteService" Eu criei o método associado dentro da classe RemoteService
public Task<string> HelloNameAsync(string name)
{
return Task.FromResult("Hello " + name + "!");
}
Eu também anuloCreateServiceInstanceListeners com o seguinte
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}
No meu"CallerService" quando tento conectar, faça a chamada para o "RemoteService" com o seguinte:
IMyService helloNameClient = ServiceProxy.Create<IMyService>(new Uri("fabric:/Application/RemoteService"));
string message = await helloNameClient.HelloNameAsync("Luke");
Eu recebo essa exceção
InnerException = {"Interface id '1994370306' is not implemented by object 'RemoteService.RemoteService'"}
Examinei esta amostra com um pente fino e tenho certeza de que tenho tudo no lugar como deveria. Eu li sobre a configuração de pontos de extremidade e o registro de seus serviços em um diretório de serviços, mas pelo que entendi, são para serviços externos e a documentação do Remoting não menciona a exigência disso.
ATUALIZAR:
Aqui está como a classe RemoteService é declarada:
internal sealed class RemoteService : StatelessService, IMyService
ATUALIZAÇÃO 2
Aqui está a aparência do Settings.xml para os dois serviços. Essas são as configurações padrão que saem da caixa com o projeto. Não adicionei ou removi nada. Também quero observar que estou executando tudo isso em minha malha de serviço local.
<?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>