Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 9 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 9 этой статьи.
Автор: Джеймс Ньютон-Кинг (James Newton-King)
Для gRPC доступен инструментарий, позволяющий разработчикам тестировать службы без сборки клиентских приложений.
- gRPCurl — это программа командной строки с открытым кодом, которая обеспечивает взаимодействие со службами gRPC.
- gRPCui строится на основе gRPCurl и добавляет интерактивный веб-интерфейс с открытым кодом для gRPC.
В этой статье рассматриваются следующие задачи:
- настройка отражения сервера gRPC с помощью приложения gRPC ASP.NET Core;
- Взаимодействие с gRPC с помощью средств тестирования:
- обнаружение и тестирование служб gRPC с помощью
grpcurl
; - взаимодействие со службами gRPC в браузере с помощью
grpcui
.
- обнаружение и тестирование служб gRPC с помощью
Примечание.
Дополнительные сведения о модульных тестах gRPC Services см. в статье Тестирование служб gRPC в ASP.NET Core.
Настройка отражения gRPC
Инструментарию должен быть известен контракт Protobuf служб, чтобы их можно было вызывать. Это можно сделать двумя способами.
- Настройка отражения gRPC на сервере. Средства, такие как gRPCurl, используют отражение для автоматического обнаружения контрактов службы.
- Добавьте файлы
.proto
в средство вручную.
Проще использовать отражение gRPC. Отражение gRPC добавляет в приложение новую службу gRPC, которую клиенты могут вызывать для обнаружения служб.
В gRPC ASP.NET Core есть встроенная поддержка отражения gRPC, обеспечиваемая пакетом Grpc.AspNetCore.Server.Reflection
. Чтобы настроить отражение в приложении, выполните указанные ниже действия.
- Добавьте ссылку на пакет
Grpc.AspNetCore.Server.Reflection
. - Регистрация отражения в
Program.cs
:AddGrpcReflection
для регистрации служб, обеспечивающих отражение;MapGrpcReflectionService
для добавления конечной точки службы отражения.
builder.Services.AddGrpc();
builder.Services.AddGrpcReflection();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
IWebHostEnvironment env = app.Environment;
if (env.IsDevelopment())
{
app.MapGrpcReflectionService();
}
После настройки отражения gRPC:
- Служба отражения gRPC добавляется в серверное приложение.
- Клиентские приложения, поддерживающие отражение gRPC, могут вызывать службу отражения для обнаружения служб, размещенных на сервере.
- Службы gRPC по-прежнему вызываются из клиента. Отражение обеспечивает только обнаружение службы и не выполняет обход безопасности на стороне сервера. Для успешного вызова конечных точек, защищенных с помощью проверки подлинности и авторизации, требуется, чтобы вызывающий объект передавал конечной точке учетные данные.
Безопасность службы отражения
Отражение gRPC возвращает список доступных API, которые могут содержать конфиденциальную информацию. Необходимо учесть, чтобы ограничить доступ к службе отражения gRPC.
Отражение gRPC обычно требуется только в локальной среде разработки. Для локальной разработки служба отражения должна быть сопоставлена только в том случае, если IsDevelopment возвращает значение true:
if (env.IsDevelopment())
{
app.MapGrpcReflectionService();
}
Доступ к службе можно контролировать с помощью стандартных методов расширения авторизации ASP.NET Core, таких как AllowAnonymous
и RequireAuthorization
.
Например, если приложение настроено для авторизации по умолчанию, настройте конечную точку отражения gRPC, AllowAnonymous
чтобы пропустить проверку подлинности и авторизацию.
if (env.IsDevelopment())
{
app.MapGrpcReflectionService().AllowAnonymous();
}
gRPCurl
gRPCurl — это программа командной строки, разрабатываемая сообществом gRPC. Она обладает следующими возможностями:
- вызов служб gRPC, включая службы потоковой передачи;
- обнаружение служб с помощью отражения gRPC;
- формирование списка и описание служб gRPC;
- работа с безопасными (TLS) и небезопасными (обычными текстовыми) серверами.
Сведения о скачивании и установке grpcurl
см. на домашней странице gRPCurl в GitHub.
Использование grpcurl
Аргумент -help
описывает параметры командной строки grpcurl
.
$ grpcurl -help
Обнаружение служб
Используйте команду describe
для просмотра служб, определенных сервером. Укажите <port>
в качестве номера порта localhost сервера gRPC. Номер порта назначается случайным образом, когда проект создается и задается в Properties/launchSettings.json
.
$ grpcurl localhost:<port> describe
greet.Greeter is a service:
service Greeter {
rpc SayHello ( .greet.HelloRequest ) returns ( .greet.HelloReply );
rpc SayHellos ( .greet.HelloRequest ) returns ( stream .greet.HelloReply );
}
grpc.reflection.v1alpha.ServerReflection is a service:
service ServerReflection {
rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse );
}
Предшествующий пример:
- Выполняет команду
describe
на сервереlocalhost:<port>
. Где<port>
назначается случайным образом, когда проект сервера gRPC создается и задается вProperties/launchSettings.json
. - Выводит службы и методы, возвращаемые отражением gRPC.
Greeter
— это служба, реализуемая приложением.ServerReflection
— это служба, добавляемая пакетомGrpc.AspNetCore.Server.Reflection
.
Используйте describe
в сочетании с именем службы, метода или сообщения, чтобы просмотреть сведения о них:
$ grpcurl localhost:<port> describe greet.HelloRequest
greet.HelloRequest is a message:
message HelloRequest {
string name = 1;
}
Вызов служб gRPC
Вызовите службу gRPC, указав имена службы и метода вместе с аргументом JSON, который представляет сообщение запроса. Сообщение JSON преобразуется в Protobuf и отправляется службе.
$ grpcurl -d '{ \"name\": \"World\" }' localhost:<port> greet.Greeter/SayHello
{
"message": "Hello World"
}
В предыдущем примере:
- Аргумент
-d
задает сообщение запроса с помощью JSON. Этот аргумент должен предшествовать адресу сервера и имени метода. - Вызывает метод
SayHello
для службыgreeter.Greeter
. - Выводит ответное сообщение в формате JSON.
- Где
<port>
назначается случайным образом, когда проект сервера gRPC создается и задается вProperties/launchSettings.json
.
В предыдущем примере используется \
для экранирования символа "
. Экранирование "
требуется в консоли PowerShell, но не должно использоваться в некоторых консолях. Например, предыдущая команда для консоли macOS:
$ grpcurl -d '{ "name": "World" }' localhost:<port> greet.Greeter/SayHello
{
"message": "Hello World"
}
gRPCui
gRPCui — это интерактивный пользовательский веб-интерфейс для gRPC. gRPCui основывается на gRPCurl. gRPCui предлагает графический интерфейс для обнаружения и тестирования служб gRPC, аналогичных средствам HTTP, таким как пользовательский интерфейс Swagger.
Сведения о скачивании и установке grpcui
см. на домашней странице gRPCui в GitHub.
С использованием grpcui
Выполните команду grpcui
, указав адрес нужного сервера в качестве аргумента:
$ grpcui localhost:<port>
gRPC Web UI available at http://127.0.0.1:55038/
В предыдущем примере укажите <port>
в качестве номера порта localhost сервера gRPC. Номер порта назначается случайным образом, когда проект создается и задается в Properties/launchSettings.json
.
Средство откроет окно браузера с интерактивным пользовательским веб-интерфейсом. Службы gRPC обнаруживаются автоматически с помощью отражения gRPC.
Дополнительные ресурсы
Для gRPC доступен инструментарий, позволяющий разработчикам тестировать службы без сборки клиентских приложений.
- gRPCurl — это программа командной строки с открытым кодом, которая обеспечивает взаимодействие со службами gRPC.
- gRPCui строится на основе gRPCurl и добавляет интерактивный веб-интерфейс с открытым кодом для gRPC.
В этой статье рассматриваются следующие задачи:
- настройка отражения сервера gRPC с помощью приложения gRPC ASP.NET Core;
- Взаимодействие с gRPC с помощью средств тестирования:
- обнаружение и тестирование служб gRPC с помощью
grpcurl
; - взаимодействие со службами gRPC в браузере с помощью
grpcui
.
- обнаружение и тестирование служб gRPC с помощью
Примечание.
Дополнительные сведения о модульных тестах gRPC Services см. в статье Тестирование служб gRPC в ASP.NET Core.
Настройка отражения gRPC
Инструментарию должен быть известен контракт Protobuf служб, чтобы их можно было вызывать. Это можно сделать двумя способами.
- Настройка отражения gRPC на сервере. Средства, такие как gRPCurl, используют отражение для автоматического обнаружения контрактов службы.
- Добавьте файлы
.proto
в средство вручную.
Проще использовать отражение gRPC. Отражение gRPC добавляет в приложение новую службу gRPC, которую клиенты могут вызывать для обнаружения служб.
В gRPC ASP.NET Core есть встроенная поддержка отражения gRPC, обеспечиваемая пакетом Grpc.AspNetCore.Server.Reflection
. Чтобы настроить отражение в приложении, выполните указанные ниже действия.
- Добавьте ссылку на пакет
Grpc.AspNetCore.Server.Reflection
. - Регистрация отражения в
Startup.cs
:AddGrpcReflection
для регистрации служб, обеспечивающих отражение;MapGrpcReflectionService
для добавления конечной точки службы отражения.
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddGrpcReflection();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
if (env.IsDevelopment())
{
endpoints.MapGrpcReflectionService();
}
});
}
После настройки отражения gRPC:
- Служба отражения gRPC добавляется в серверное приложение.
- Клиентские приложения, поддерживающие отражение gRPC, могут вызывать службу отражения для обнаружения служб, размещенных на сервере.
- Службы gRPC по-прежнему вызываются из клиента. Отражение обеспечивает только обнаружение службы и не выполняет обход безопасности на стороне сервера. Для успешного вызова конечных точек, защищенных с помощью проверки подлинности и авторизации, требуется, чтобы вызывающий объект передавал конечной точке учетные данные.
gRPCurl
gRPCurl — это программа командной строки, разрабатываемая сообществом gRPC. Она обладает следующими возможностями:
- вызов служб gRPC, включая службы потоковой передачи;
- обнаружение служб с помощью отражения gRPC;
- формирование списка и описание служб gRPC;
- работа с безопасными (TLS) и небезопасными (обычными текстовыми) серверами.
Сведения о скачивании и установке grpcurl
см. на домашней странице gRPCurl в GitHub.
Использование grpcurl
Аргумент -help
описывает параметры командной строки grpcurl
.
$ grpcurl -help
Обнаружение служб
Используйте команду describe
для просмотра служб, определенных сервером:
$ grpcurl localhost:5001 describe
greet.Greeter is a service:
service Greeter {
rpc SayHello ( .greet.HelloRequest ) returns ( .greet.HelloReply );
rpc SayHellos ( .greet.HelloRequest ) returns ( stream .greet.HelloReply );
}
grpc.reflection.v1alpha.ServerReflection is a service:
service ServerReflection {
rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse );
}
Предшествующий пример:
- Выполняет команду
describe
на сервереlocalhost:5001
. - Выводит службы и методы, возвращаемые отражением gRPC.
Greeter
— это служба, реализуемая приложением.ServerReflection
— это служба, добавляемая пакетомGrpc.AspNetCore.Server.Reflection
.
Используйте describe
в сочетании с именем службы, метода или сообщения, чтобы просмотреть сведения о них:
$ grpcurl localhost:5001 describe greet.HelloRequest
greet.HelloRequest is a message:
message HelloRequest {
string name = 1;
}
Вызов служб gRPC
Вызовите службу gRPC, указав имена службы и метода вместе с аргументом JSON, который представляет сообщение запроса. Сообщение JSON преобразуется в Protobuf и отправляется службе.
$ grpcurl -d '{ \"name\": \"World\" }' localhost:5001 greet.Greeter/SayHello
{
"message": "Hello World"
}
В предыдущем примере:
- Аргумент
-d
задает сообщение запроса с помощью JSON. Этот аргумент должен предшествовать адресу сервера и имени метода. - Вызывает метод
SayHello
для службыgreeter.Greeter
. - Выводит ответное сообщение в формате JSON.
В предыдущем примере используется \
для экранирования символа "
. Экранирование "
требуется в консоли PowerShell, но не должно использоваться в некоторых консолях. Например, предыдущая команда для консоли macOS:
$ grpcurl -d '{ "name": "World" }' localhost:5001 greet.Greeter/SayHello
{
"message": "Hello World"
}
gRPCui
gRPCui — это интерактивный пользовательский веб-интерфейс для gRPC. gRPCui основывается на gRPCurl. gRPCui предлагает графический интерфейс для обнаружения и тестирования служб gRPC, аналогичных средствам HTTP, таким как пользовательский интерфейс Swagger.
Сведения о скачивании и установке grpcui
см. на домашней странице gRPCui в GitHub.
С использованием grpcui
Выполните команду grpcui
, указав адрес нужного сервера в качестве аргумента:
$ grpcui localhost:5001
gRPC Web UI available at http://127.0.0.1:55038/
Средство откроет окно браузера с интерактивным пользовательским веб-интерфейсом. Службы gRPC обнаруживаются автоматически с помощью отражения gRPC.
Дополнительные ресурсы
ASP.NET Core