Grpc.Core.Channel - используется сервис вызовов.Когда код выполняется в среде частичного доверия, появится сообщение об ошибке ниже.
"Правила безопасности наследования, нарушенные типом: 'Grpc.Core.internal.SafeHandleZeroIsInvalid' Производные типы должны либо соответствовать доступности безопасности базового типа, либо быть менее доступными"
Как использоватьКанал для вызова службы Grpc в среде с частичным доверием?если нет, есть ли другой способ вызвать Grpc Service?
Изучите код gRPC. Класс SafeHandle .net наследуется SafeHandleZeroIsInvalid.Как описано в официальном документе, для частично доверенного кода это запрещено.InheritanceDemand для SafeHandle: «для полного доверия наследникам. Этот член не может быть унаследован частично доверенным кодом».https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.safehandle?view=netframework-4.8
Я попытался создать свой собственный класс, унаследованный от SafeHandle.И я попытался создать новый экземпляр этого класса.Когда код запускается в режиме частичного доверия, появляется та же ошибка.Я думаю, что SafeHandle является основной причиной этой проблемы.
//the code is super simple, I just try to create a channel on a constructor.
public class WriterClient
{
private Channel _channel;
private LoggingCenter _logger;
public WriterClient(int port, ILogging logger)
{
_logger = logger == null? new LoggingCenter(new NullLogger()): new LoggingCenter(logger);
//when run in Partial Trust, the code below will throw an exception.
_channel = new Channel("127.0.0.1", port, ChannelCredentials.Insecure);
}
Мне нужно правильно вызвать службу Grpc в режиме частичного доверия.Любой обходной путь для этого?