Я экспериментирую с gRP C в качестве возможной технологии для использования. Я написал синхронный клиент и сервер на C ++. Сервер возвращает метаданные клиенту, и клиент может успешно получить доступ к метаданным.
Сейчас я тестирую c# клиента с тем же синхронным сервером c ++. Похоже, что для получения доступа к метаданным, возвращаемым сервером, клиент должен использовать asyn c вызов сервера. Я не могу заставить это работать, поэтому мне интересно:
- Должно ли это работать?
- Есть ли способ получить метаду без использования asyn c версии звонки от клиента?
Так как мой тест не может заставить это работать, кто-нибудь может заметить, что я делаю неправильно. У меня есть метод, который выглядит как код ниже. Когда клиент вызывает метод Connect, я хочу, чтобы сервер сгенерировал уникальный ключ и отправил его обратно. С этого момента клиент отправляет этот ключ в метаданных, чтобы сервер мог определить, какой клиент вызывает.
Вот моя попытка. Параметр «ItemInterface.Items.ItemsClient client», переданный методу, является экземпляром класса, созданного proto c:
private static async Task<string> _MakeConnection(ItemInterface.Items.ItemsClient client, ItemInterface.ConnectRequest request)
{
string serverAssignedKey = "";
CallOptions options = new CallOptions();
var answer = client.ConnectAsync(request, options);
var response = await answer.ResponseAsync;
serverAssignedKey = answer.GetTrailers().First(e => e.Key == "client_id").Value;
return serverAssignedKey;
}
Вызов поступает на сервер и покидает сервер, но затем никогда не возвращается к моему вызывающему методу. Клиент завис.
Спасибо.