в последние несколько дней я пытался оснастить свое приложение стеками IPC службы удаленного взаимодействия.Я изначально реализовал версию V2, но только благодаря этому сообщению (https://github.com/Azure/service-fabric-issues/issues/735)) заметил, что он не поддерживает возврат интерфейсов.
Итак, я только что переключился на V2_1.
Однако я все еще сталкиваюсь с этой проблемой:
One or more errors occurred. (Type 'MooMed.Core.DataTypes.Session.SessionContext' with data contract name 'SessionContext:http://schemas.datacontract.org/2004/07/MooMed.Core.DataTypes.Session' is not expected. Add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.)'
Это метод службы, который вызывается в конечной точке:
[CanBeNull]
public Task<ISessionContext> GetSessionContext(int accountId):
Соответствующие классы / интерфейсы выглядят так:
public interface ISessionContext
{
Account Account { get; set; }
}
[DataContract]
public class SessionContext : ISessionContext
{
[DataMember]
public Account Account { get; set; }
}
Также, как я уже упоминал, я только что изменил свою версию удаленного взаимодействия с V2 на V2_1, поэтому она добавлена в класс Service, который содержит метод GetSessionContext
:
[assembly: FabricTransportServiceRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2_1, RemotingClientVersion = RemotingClientVersion.V2_1)]
Итак, в соответствии с документами (https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-communication-remoting#use-the-remoting-v2-interface-compatible-stack) Теперь я должен быть полностью укомплектован, чтобы все работало должным образом.
Единственное, что я вижу, что я делаю иначе, чем учебник, - это то, как я объявляю конечную точкуслушатели. Я делаю это через FabricTransportServiceRemotingListener
следующим образом:
public static ServiceReplicaListener CreateTypedListener([NotNull] IService service)
{
return new ServiceReplicaListener(context => new FabricTransportServiceRemotingListener(context, service),
$"I{service.GetType().Name}");
}
Однако я не понимаю, как это может быть виновником, так как запрос поступает правильно, и я не думаю, что объявляюконечные точки обязательно яНе обращайте внимания на то, как сериализуются ответы.
Итак, что я здесь не так делаю?