Tinkoff / invest-api-csharp-sdk

51 stars 19 forks source link

gRPC клиент для подключения к серверам Тинькофф. #24

Closed AndreyVolodin2 closed 2 years ago

AndreyVolodin2 commented 2 years ago

Мне удалось подключиться через программу Kreya, которая описана в документации. Пытаюсь теперь создать на C# gRPC клиента, который подключится к серверам и выполнит нужные мне запросы. Создаю приложение Windows Forms .NET 6, загружаю NuGet`ы - Google.Protobuf, Grpc.Net.Client, Grpc.Tools. Копирую все Proto-файлы в папку Protos. В коде пишу using Grpc.Net.Client; а в событии нажатия на кнопку using var chanel = GrpcChannel.ForAddress("https://invest-public-api.tinkoff.ru:443"); и если дальше следовать учебникам из YouTube, нужно написать строку var client = new <имя пэкеджа из Proto файла>.InstrumentsService(chanel); - и вот это уже не срабатывает. Имя пэкеджа в файле instruments.proto = "tinkoff.public.invest.api.contract.v1", если попытаться написать var client = new tinkoff.public.invest.api.contract.v1.InstrumentsService(chanel); шарп шлет лесом. Что делать не понятно - может переименовать покороче? К тому же не понятно, нужно ли proto-файлам в свойствах назначать Build action = Protobuf compiler, или нет. Кажется, что нужно, но если делаю так, при сборке вываливаются десятки ошибок из этих файлов.

Кто-то может подсказать, как пройти дальше? Я в тупике!

AndreyVolodin2 commented 2 years ago

Так - понял. Нужно ли proto-файлам в свойствах назначать Build action = Protobuf compiler, или нет. - ДА! Ошибки возникали из за того, что не находились файлы в частности common.proto - ссылки между proto-файлами. Нужно в пути к файлу указать папку: вместо import "common.proto"; использовать import "proto/common.proto";, где proto - ваша папка с proto-файлами. Написал строку var client = new Tinkoff.InvestApi.V1.InstrumentsService(chanel); - вроде шарп пропускает, но при компиляции возникают 2 ошибки: 1>C:\Users\User\source\repos\Tink5\Tink5\Form1.cs(17,26,17,77): error CS0712: Не удается создать экземпляр статического класса "InstrumentsService". 1>C:\Users\User\source\repos\Tink5\Tink5\Form1.cs(17,13,17,16): error CS0723: Не удается объявить переменную статического типа "InstrumentsService" - что с этим делать пока не ясно.

AndreyVolodin2 commented 2 years ago

Так - понял свою ошибку. Вместо var client = new Tinkoff.InvestApi.V1.InstrumentsService(chanel); нужно писать var client = new Tinkoff.InvestApi.V1.InstrumentsService.InstrumentsServiceClient(chanel);. Дальше все работает настолько, что тинек даже шлет лесом за не указанный токен. Теперь бы понять, как его указать. Явно через GrpcChannelOptions, но как именно - не понятно!

AndreyVolodin2 commented 2 years ago

Удалось таки подключиться и получить список инструментов. Как будет минутка - поделюсь результатами.

rus-art commented 2 years ago

Добрый день! Соответственно у нас тут и реализован этот самый клиент, не нужно самим ничего настраивать. Подключайте пакет Tinkoff.InvestApi, смотрите пример. Будем рады ответить на вопросы

AndreyVolodin2 commented 2 years ago

@rus-art Это здорово, но проблема в том, что научиться с нуля писать gRpc клиенты оказалось проще и быстрее, чем разобраться в том, как работает этот API, призванный, казалось бы, упростить нам жизнь.

rus-art commented 2 years ago

Есть предложения, как можно улучшить текущий SDK, чего не хватает, чтобы упростить жизнь? Было бы интересно сравнить текущий клиент с тем, что получилось у вас.