小编Bri*_*lig的帖子

ASP.NET Core API - 在 Azure 应用服务上获取 404,但在本地主机上运行正常

我有一个托管在 Azure 应用服务中的 ASP.NET Core 2.1 应用。在本地执行时,我可以访问控制器。但是当我托管在 Azure 应用程序中时,我收到 404。以下是重现的最少步骤。

在 Visual Studio 2017 中添加一个新项目。选择 ASP.NET Core Web 应用程序。选择 ASP.NET Core 2.1,API 项目模板,无身份验证,配置为 HTTPS。将新应用作为自托管(不使用 IIS)运行。浏览到 https://localhost:5001/api/values。我得到了预期的响应(尽管命令行上有一个关于无法对 HTTPS 连接进行身份验证的异常)。

右键单击项目并选择发布。选择以创建新的应用服务。我选择了我现有的订阅、托管计划和资源组。我保留了默认的应用程序名称。创建应用程序。

浏览到 url https://app_name.azurewebsites.net,我看到了默认页面。浏览到https://appname.azurewebsites.net/api/values,我得到一个 404。

我确定我错过了一些非常愚蠢的东西,但我就是想不通。

azure asp.net-core-webapi

9
推荐指数
3
解决办法
4963
查看次数

如何在 Azure 网站中禁用 HTTPS 重定向

我有一个非常简单的网站,用于测试目的,我想支持 HTTP。目前,所有 HTTP 请求都会自动重定向到 HTTPS。以下是重现该应用程序的步骤:

在 Visual Studio 2019 中创建一个新的 ASP.NET Core Web 应用程序。选择 ASP.NET Core 3.1 并为项目模板选择空。禁用“配置 HTTPS”。右键单击新项目并选择“发布...”。将应用程序发布到新的应用程序服务。

发布后浏览网站。它会将您重定向到 HTTPS。这是我已经尝试解决的问题。

在 Azure 门户中配置新创建的应用服务。确保应用程序服务身份验证已关闭。在 TLS/SSL 设置中,将“仅限 HTTPS”设置为关闭。

在 Program.cs 中添加 UseUrls 选项。

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseUrls("http://localhost:8001");
            webBuilder.UseStartup<Startup>();
        });
Run Code Online (Sandbox Code Playgroud)

在 launchSettings.json 中,确保应用程序 URL 使用 http。

上述解决方案都不适合我。

https azure azure-web-app-service asp.net-core

7
推荐指数
2
解决办法
5084
查看次数

C#等待生产者/消费者中的多个事件

我正在使用生产者/消费者模式实现数据链路层.数据链路层有自己的线程和状态机,通过线路传输数据链路协议(以太网,RS-232 ......).物理层的接口表示为System.IO.Stream.另一个线程将消息写入数据链接对象并从中读取消息.

数据链接对象具有空闲状态,必须等待以下四种情况之一:

  1. 收到一个字节
  2. 网络线程提供了一条消息
  3. 保持活动计时器已过期
  4. 所有通信都被网络层取消

我很难找到最好的方法来实现这一点,而无需将通信分成读/写线程(从而大大增加了复杂性).以下是我如何获得4分中的3分:

// Read a byte from 'stream'. Timeout after 10 sec. Monitor the cancellation token.
stream.ReadTimeout = 10000;
await stream.ReadAsync(buf, 0, 1, cts.Token);
Run Code Online (Sandbox Code Playgroud)

要么

BlockingCollection<byte[]> SendQueue = new ...;
...
// Check for a message from network layer. Timeout after 10 seconds.
// Monitor cancellation token.
SendQueue.TryTake(out msg, 10000, cts.Token);
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能阻止线程,等待所有四个条件?欢迎所有建议.我没有设置任何架构或数据结构.

编辑:********感谢大家的帮助.这是我的解决方案********

首先,我认为没有生产者/消费者队列的异步实现.所以我实现了类似于这个stackoverflow帖子的东西.

我需要一个外部和内部取消源来分别停止使用者线程并取消中间任务,类似于本文.

byte[] buf = new byte[1];
using (CancellationTokenSource internalTokenSource = new CancellationTokenSource())
{
    CancellationToken …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous producer-consumer

6
推荐指数
1
解决办法
629
查看次数