Не удается создать новый экземпляр gRPC.Core.Channel, когда код выполняется в режиме частичного доверия. - PullRequest
1 голос
/ 20 сентября 2019

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 в режиме частичного доверия.Любой обходной путь для этого?

...