Кроме того, тот же код работает с C# .NET 8.0 и эмулятором gcloud. Однако мне нужен код для работы с .NET Framework 4.8.
Оба используют одни и те же пакеты:
Код: Выделить всё
Google.Api.Gax = 4.4.0
Google.Cloud.PubSub.V1 = 3.8.0
Код: Выделить всё
>gcloud version
Google Cloud SDK 455.0.0
beta 2023.11.10
bq 2.0.98
core 2023.11.10
gsutil 5.27
pubsub-emulator 0.8.10
Код: Выделить всё
gcloud beta emulators pubsub start --project=my-project --host-port=localhost:8085
Я создаю переменную среды:
Код: Выделить всё
setx PUBSUB_EMULATOR_HOST "localhost:8085"
Код: Выделить всё
using Google.Api.Gax;
using Google.Cloud.PubSub.V1;
using System;
using System.Threading.Tasks;
namespace PubSubDotNetTest
{
internal class Program
{
static void Main(string[] args)
{
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
Subscriber().GetAwaiter().GetResult();
}
static async Task Subscriber()
{
Console.WriteLine("Starting publisher...");
var projectId = "my-project";
var topicId = "my-topic";
PublisherServiceApiClient publisherService = await new PublisherServiceApiClientBuilder
{
EmulatorDetection = EmulatorDetection.EmulatorOrProduction
}.BuildAsync();
TopicName topicName = new TopicName(projectId, topicId);
PublisherClient publisher = await new PublisherClientBuilder
{
TopicName = topicName,
EmulatorDetection = EmulatorDetection.EmulatorOrProduction
}.BuildAsync();
await publisher.PublishAsync("Hello, Pubsub1");
await publisher.ShutdownAsync(TimeSpan.FromSeconds(15));
}
}
}
Код: Выделить всё
Unhandled Exception: Grpc.Core.RpcException: Status(StatusCode="Internal", Detail="Bad gRPC response. Response protocol downgraded to HTTP/1.1.")
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Api.Gax.Grpc.ApiCallRetryExtensions.c__DisplayClass0_0`2.d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.PubSub.V1.Tasks.ForwardingAwaiter`1.GetResult() in /_/apis/Google.Cloud.PubSub.V1/Google.Cloud.PubSub.V1/Tasks/ForwardingAwaiter.cs:line 41
at Google.Cloud.PubSub.V1.Tasks.Extensions.c__DisplayClass5_0`1.d.MoveNext() in /_/apis/Google.Cloud.PubSub.V1/Google.Cloud.PubSub.V1/Tasks/TaskHelper.cs:line 174
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Google.Cloud.PubSub.V1.Tasks.ForwardingAwaiter`1.GetResult() in /_/apis/Google.Cloud.PubSub.V1/Google.Cloud.PubSub.V1/Tasks/ForwardingAwaiter.cs:line 41
at Google.Cloud.PubSub.V1.PublisherClientImpl.
d__32.MoveNext() in /_/apis/Google.Cloud.PubSub.V1/Google.Cloud.PubSub.V1/PublisherClientImpl.cs:line 247
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at PubSubDotNetTest.Program.d__1.MoveNext() in C:\MyPath\Program.cs:line 37
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at PubSubDotNetTest.Program.Main(String[] args) in C:\MyPath\Program.cs:line 12
Код: Выделить всё
[pubsub] Nov 21, 2023 10:37:46 AM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead
[pubsub] INFO: Detected non-HTTP/2 connection.
[pubsub] Nov 21, 2023 10:37:46 AM io.gapi.emulators.netty.NotFoundHandler handleRequest
[pubsub] INFO: Unknown request URI: /google.pubsub.v1.Publisher/Publish
[pubsub] Nov 21, 2023 10:37:46 AM io.gapi.emulators.netty.NotFoundHandler handleRequest
[pubsub] INFO: Unknown request URI: /google.pubsub.v1.Publisher/Publish
[pubsub] Nov 21, 2023 10:37:46 AM io.gapi.emulators.netty.NotFoundHandler handleRequest
[pubsub] INFO: Unknown request URI: /google.pubsub.v1.Publisher/Publish
[pubsub] Nov 21, 2023 10:37:47 AM io.gapi.emulators.netty.NotFoundHandler handleRequest
[pubsub] INFO: Unknown request URI: /google.pubsub.v1.Publisher/Publish
[pubsub] Nov 21, 2023 10:37:52 AM io.gapi.emulators.netty.NotFoundHandler handleRequest
[pubsub] INFO: Unknown request URI: /google.pubsub.v1.Publisher/Publish
Код: Выделить всё
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
Я также попробовал этот код:
Код: Выделить всё
static async Task Subscriber()
{
Console.WriteLine("Starting publisher...");
var projectId = "project-id";
var topicId = "topic-id";
string emulatorHostAndPort = Environment.GetEnvironmentVariable("PUBSUB_EMULATOR_HOST");
PublisherServiceApiClient publisherService = await new PublisherServiceApiClientBuilder
{
Endpoint = emulatorHostAndPort,
ChannelCredentials = ChannelCredentials.Insecure
}.BuildAsync();
TopicName topicName = new TopicName(projectId, topicId);
PublisherClient publisher = await new PublisherClientBuilder
{
TopicName = topicName,
Endpoint = emulatorHostAndPort,
ChannelCredentials = ChannelCredentials.Insecure
}.BuildAsync();
await publisher.PublishAsync("Hello, Pubsub1");
await publisher.ShutdownAsync(TimeSpan.FromSeconds(15));
}
Код C# .NET 8.0:
Код: Выделить всё
using Google.Api.Gax;
using Google.Cloud.PubSub.V1;
Console.WriteLine("Starting publisher...");
var projectId = "my-project";
var topicId = "my-topic";
PublisherServiceApiClient publisherService = await new PublisherServiceApiClientBuilder
{
EmulatorDetection = EmulatorDetection.EmulatorOrProduction
}.BuildAsync();
TopicName topicName = new TopicName(projectId, topicId);
PublisherClient publisher = await new PublisherClientBuilder
{
TopicName = topicName,
EmulatorDetection = EmulatorDetection.EmulatorOrProduction
}.BuildAsync();
await publisher.PublishAsync("Hello, Pubsub2");
await publisher.ShutdownAsync(TimeSpan.FromSeconds(15));
Как я могу заставить это работать с .NET Framework 4.8?
Это работает хорошо, и мой эмулятор Pub/Sub получает сообщение.
Как я могу заставить это работать с .NET Framework 4.8?
Это работает хорошо, и мой эмулятор Pub/Sub получает сообщение.
Как я могу заставить это работать с .NET Framework 4.8?
Это работает хорошо, и мой эмулятор Pub/Sub получает сообщение.
Как я могу заставить это работать с .NET Framework 4.8?
Это работает хорошо, и мой эмулятор Pub/Sub получает сообщение.
Как я могу заставить это работать с .NET Framework 4.8?
Это работает хорошо, и мой эмулятор Pub/Sub получает сообщение.
Как я могу заставить это работать с .NET Framework 4.8?
п>
Подробнее здесь: https://stackoverflow.com/questions/775 ... -framework
Мобильная версия