Aspnetcore: 在 iis 中托管 grpc 服务还是作为应用服务?

创建于 2019-04-03  ·  153评论  ·  资料来源: dotnet/aspnetcore

是否有可能做到这一点? 如果有怎么办?


2020/10/28 更新-@JamesNK

用户语音问题

将 gRPC 支持添加到 App Service 时存在 Microsoft Azure 用户语音问题。 如果这对您来说很重要,请考虑投票。

gRPC-Web

带有 .NET 的 gRPC-Web 现在可用。 gRPC-Web 与 IIS 和 Azure 应用服务兼容。 链接到包含更多信息的博客文章: https ://devblogs.microsoft.com/aspnet/grpc-web-for-net-now-available/

IIS

.NET 5 和 Windows 的内部版本支持 IIS。 更多信息: https ://github.com/dotnet/aspnetcore/issues/9020#issuecomment -713738181

area-grpc

最有用的评论

@shirhatti鉴于 gRPC 似乎是 .NET Core 3 (https://github.com/grpc/grpc-dotnet) 的一个主要特性,如果考虑到这么多 . NET Web 应用程序托管在这些之上。 我希望 .NET Core 中该功能的可用性有助于推动您的路线图。

所有153条评论

@moodya ,您是否查看了https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.0&tabs=visual-studio上的文档?

如果您遇到问题,请告诉我们,我们可以进行调查。

是的,我已经构建了一个作为通用托管服务运行的服务。 我已将它移植到新的 asp net core 3 模板并让它在自托管的 kestrel 上运行,但目前正在考虑将其托管在 iis 后面,并希望将其部署为 Azure 中的应用服务。 我无法让前者(iis)工作。

获取适用于 Android 的 Outlook https://aka.ms/ghei36


来自:Eilon Lipton [email protected]
发送:2019 年 4 月 3 日,星期三 6:06:17 PM
至:aspnet/AspNetCore
抄送:穆迪; 提到
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

嗨@moodya https://github.com/moodya ,您是否查看了https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-上的文档

如果您遇到问题,请告诉我们,我们可以进行调查。


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看https://github.com/aspnet/AspNetCore/issues/9020#issuecomment-479575937 ,或将帖子静音https://github.com/notifications/unsubscribe-auth/AlUvPONL4H1tZ- pHOakDspdkXLLgThWbks5vdN-JgaJpZM4cZ2SG

我找不到任何有关如何执行此操作的示例,因此可能尚不支持

获取适用于 Android 的 Outlook https://aka.ms/ghei36


发件人:阿兰·穆迪[email protected]
发送:2019 年 4 月 3 日,星期三 6:11:06 PM
至:aspnet/AspNetCore; ASPNET/AspNetCore
抄送:提及
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

是的,我已经构建了一个作为通用托管服务运行的服务。 我已将它移植到新的 asp net core 3 模板并让它在自托管的 kestrel 上运行,但目前正在考虑将其托管在 iis 后面,并希望将其部署为 Azure 中的应用服务。 我无法让前者(iis)工作。

获取适用于 Android 的 Outlook https://aka.ms/ghei36


来自:Eilon Lipton [email protected]
发送:2019 年 4 月 3 日,星期三 6:06:17 PM
至:aspnet/AspNetCore
抄送:穆迪; 提到
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

嗨@moodya https://github.com/moodya ,您是否查看了https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-上的文档

如果您遇到问题,请告诉我们,我们可以进行调查。


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看https://github.com/aspnet/AspNetCore/issues/9020#issuecomment-479575937 ,或将帖子静音https://github.com/notifications/unsubscribe-auth/AlUvPONL4H1tZ- pHOakDspdkXLLgThWbks5vdN-JgaJpZM4cZ2SG

@shirhatti - 对此有任何想法吗?

无法在 IIS/Azure 应用服务中托管 gRPC。
Http.Sys 的 HTTP/2 实现不支持 gRPC 所依赖的 HTTP 响应尾随标头。

感谢您的及时回复。 您目前如何建议在生产场景中托管 grpc 服务? 此外,您是否知道 grpc 服务可以在 iis / app 服务上托管的任何时间尺度?

获取适用于 Android 的 Outlook https://aka.ms/ghei36


来自:Sourabh Shirhatti [email protected]
发送时间:2019 年 4 月 3 日星期三晚上 7:13:23
至:aspnet/AspNetCore
抄送:穆迪; 提到
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

无法在 IIS/Azure 应用服务中托管 gRPC。
Http.Sys 的 HTTP/2 实现不支持 gRPC 所依赖的 HTTP 响应尾随标头。


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看https://github.com/aspnet/AspNetCore/issues/9020#issuecomment-479600486 ,或将帖子静音https://github.com/notifications/unsubscribe-auth/AlUvPNHH4- HhNsSAtugTw0MzzNco6c76ks5vdO9DgaJpZM4cZ2SG

推荐的方法是在 AKS 上托管 gRPC 服务。

就应用服务时间表而言,我会遵从@stefsch

谢谢你回到我身旁。 在托管 grpc 服务方面,就 aks 与服务结构而言,aks 是更好的选择吗? 如果是这样,为什么?

获取适用于 Android 的 Outlook https://aka.ms/ghei36


来自:Sourabh Shirhatti [email protected]
发送时间:2019 年 4 月 8 日星期一上午 7:31:45
至:aspnet/AspNetCore
抄送:穆迪; 提到
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

推荐的方法是在 AKS 上托管 gRPC 服务。

就应用服务时间表而言,我会遵从@stefsch https://github.com/stefsch


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看https://github.com/aspnet/AspNetCore/issues/9020#issuecomment-480701227 ,或将帖子静音https://github.com/notifications/unsubscribe-auth/AlUvPLwQW8HCp- YXsz6yNaK_RH7jbZzWks5veuJRgaJpZM4cZ2SG

我目前期待问题能够做到这一点。 我使用 aspnetcore 3 preview 3 和 Kestrel 获得了运行良好的 gRPC 服务。 但是,当服务发送响应时,使用 IIS 会出现关于预告片的错误(请求被很好地接收):
gPRC 错误 => 2 未知:未收到状态)
Dotnet 错误 => Grpc.AspNetCore.Server.Internal.HttpResponseExtensions.ConsolidateTrailers ...

根据上面的消息,不认为 iis 支持托管 grpc 服务

获取适用于 Android 的 Outlook https://aka.ms/ghei36


来自:allustrement [email protected]
发送:2019 年 4 月 25 日星期四上午 10:57:42
至:aspnet/AspNetCore
抄送:穆迪; 提到
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

我目前期待问题能够做到这一点。 我使用 aspnetcore 3 preview 3 和 Kestrel 获得了运行良好的 gRPC 服务。 但是,当服务发送响应时,使用 IIS 会出现关于预告片的错误(请求被很好地接收):
gPRC 错误 => 2 未知:未收到状态)
Dotnet 错误 => Grpc.AspNetCore.Server.Internal.HttpResponseExtensions.ConsolidateTrailers ...


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看https://github.com/aspnet/AspNetCore/issues/9020#issuecomment-486607635 ,或将帖子静音https://github.com/notifications/unsubscribe-auth/AJKS6PEAJ2UKKH2QIKNTCZDPSF6BNANCNFSM4HDHMSDA

在此交流https://forums.iis.net/p/1241598/2147837.aspx?p=True&t=636917571046786374之后,似乎这不是 Web 服务器处理 gRPC 的责任。 gPRC 使用 HTTP/2,IIS 支持 HTTP/2,所以它必须工作。 如果不是,那是 IIS 的错误,或者更有可能是 dotnetcore 的错误。

根据上面消息中的微软人员,iis 不支持托管 grpc 服务所需的尾随标头。 这意味着您目前无法在 iis 中或作为应用服务托管一个。

获取适用于 Android 的 Outlook https://aka.ms/ghei36


来自:allustrement [email protected]
发送:2019 年 4 月 25 日星期四上午 11:39:08
至:aspnet/AspNetCore
抄送:穆迪; 提到
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

在此交流https://forums.iis.net/p/1241598/2147837.aspx?p=True&t=636917571046786374之后,似乎这不是 Web 服务器处理 gRPC 的责任。 gPRC 使用 HTTP/2,IIS 支持 HTTP/2,所以它必须工作。 如果不是,那是 IIS 的错误,或者更有可能是 dotnetcore 的错误。


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看https://github.com/aspnet/AspNetCore/issues/9020#issuecomment-486620151 ,或将帖子静音https://github.com/notifications/unsubscribe-auth/AJKS6PBQO4427EYN67SI7A3PSGC4ZANCNFSM4HDHMSDA

谢谢,我错过了它,这对我的问题很有意义。
@shirhatti计划在路线图上提供支持?

我们 (IIS) 目前正在评估是否支持 HTTP 响应预告片。 我还没有可以谈论的路线图/承诺。

@shirhatti鉴于 gRPC 似乎是 .NET Core 3 (https://github.com/grpc/grpc-dotnet) 的一个主要特性,如果考虑到这么多 . NET Web 应用程序托管在这些之上。 我希望 .NET Core 中该功能的可用性有助于推动您的路线图。

我完全同意@jbrantly。 gRPC 被宣传为 .NET Core 3 的主要功能之一。
它应该可以在 IIS/Azure 应用服务中托管。
@shirhatti请考虑将此添加到路线图中

我也同意。

获取适用于 Android 的 Outlook https://aka.ms/ghei36


来自:Tomasz Jagusz [email protected]
发送:2019 年 4 月 26 日星期五上午 9:42:58
至:aspnet/AspNetCore
抄送:穆迪; 提到
主题:回复:[aspnet/AspNetCore] 在 iis 中托管 grpc 服务还是作为应用服务? (#9020)

我完全同意@jbrantly https://github.com/jbrantly 。 gRPC 被宣传为 .NET Core 3 的主要功能之一。
它应该可以在 IIS/Azure 应用服务中托管。
@shirhatti https://github.com/shirhatti请考虑将此添加到路线图中


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看https://github.com/aspnet/AspNetCore/issues/9020#issuecomment-486977989 ,或将帖子静音https://github.com/notifications/unsubscribe-auth/AJKS6PENWT46GCJ7GQGEGPPSK6BFANCNFSM4HDHMSDA

我完全同意。

我们正在调查它。 它需要更改 Windows 内核和更改 IIS。

@davidfowl当.NET Core 3 发布时这可能吗?
在应用服务中托管 GRPC 的能力对我来说是一个障碍。

现在是2019 年 5 月 29 日,但没有迹象表明这将成为可能。 我正在寻找在IIS中托管GRPC服务并添加证书以使用HTTPS :(

不,这在 IIS 上是不可能的,我们正在努力进行更改,但这将是一个缓慢的过程(因为它需要更新 Windows)。

我大约失去了大约 3 天...谢谢 iis

嗨@davidfowl
任何更新?

@davidfowl有没有可能在 .NET Core 3.0 发布之前添加它? 还是我们应该等待 3.1 或 5.0?

不,因为它需要更改 Windows。 它不会成为 3.0 的一部分,它需要最新版本的 Windows(无论当时是什么)才能获得这些功能。 没有预计到达时间

嗯,我正在计划一个服务结构实现,它将在 dotnet core 3 之上使用基于 gRPC 的无状态服务和可靠参与者。这会咬我的屁股吗? 如果我在 SF 上托管,我想我会在核心使用红隼? 是时候制作原型了。

@oising在这里是同一条船——但我们正在慢慢转向 k8s + linux 容器,所以无论如何这种方式都有助于推动我们前进。

我只是加 1,因为我现在一直在玩 gRPC,并希望最终开始在我的一些客户项目中采用它,因此正在研究部署工作流程。 我对使用 .net 核心在生产环境中部署所产生的大量运营开销感到有些沮丧。

我还花了几天时间才弄清楚 IIS 是问题所在。 真的在寻找修复。 任何解决方法?

@bingoo没有 Windows 支持和 IIS 你不走运。 你可以使用 Service Fabric,但我没有这方面的经验。 我希望能够以简单的方式将它托管在 IIS 或 Azure 中。
对于当前的项目,由于这个问题,Grpc 不是我的选择。

如果这是对文档的一个大胆的警告,那就太好了......

还不支持 IIS 托管。 App Services 默认使用 Windows Server 2016 + IIS 作为后端,但现在它也支持 Linux / Containers。 如果你只想在 Azure 应用服务上部署 GRPC,现在可以使用 Linux 容器来完成。 但应用服务计划不能与 Windows 托管计划共享。 您将需要花费额外的钱购买由 Linux 容器支持的新应用服务计划。

最好的方法是使用 AKS,然后使用大使。 Ambassador 是一个基于 Envoy 的 API 网关,在 Kubernetes 中作为容器运行。 它允许您代理 grpc 和 grpc-web,例如。 浏览器到 grpc 服务器和一个 grpc 客户端,也许 ac# one 到 grpc 服务器。 如果您希望前端 js 接收 gRPC 调用,则需要 grpc web 和代理,因为浏览器也不正确支持 http2 响应尾随标头。 Grpc Web 默认使用 Envoy,这就是为什么 Ambassador 是最好的。

如果您只想在 Azure 应用服务上部署 GRPC,现在可以使用 Linux 容器来完成

@EdiWang Linux 的应用服务目前不支持此功能。 我们目前正在与应用服务合作以启用此功能,但我没有任何 ETA 可分享

你好好人
我有点困惑,所以我们不能在 azure 中提供 grpc 服务。
但是 azure 本身正在使用 grpc,即 Azure Functions 语言工作程序 Protobuf。
https://github.com/Azure/azure-functions-language-worker-protobuf
或者我在这里错过了什么?
试图理解 :confused:

@GoranHalvorsson您可以在 Azure 中拥有 gRPC 服务,只是还不能在 Azure 应用服务中运行它们。

@markrendle感谢您的回答。 那么如何在 Azure 中使用/设置 gRpc 服务?

如果这是对文档的一个大胆的警告,那就太好了......

https://github.com/aspnet/AspNetCore.Docs/issues/14684

@markrendle感谢您的回答。 那么如何在 Azure 中使用/设置 gRpc 服务?

通过不使用 IIS,这意味着使用 Service Fabric 或 AKS - 两者都使用原始 Kestrel。 SF和AKS有不同的特点。 谷歌搜索“Service Fabric vs AKS”并喝杯咖啡。

我创建了使用 .NET Core 3.0 创建测试和部署 grpc 服务的分步指南
https://github.com/rupeshtech/k8s-grpc-dotntecore

我只是研究了这个问题,所以我还没有尝试过任何东西; 但是有没有人尝试将 Azure Web App 用于(容器 https://azure.microsoft.com/en-us/services/app-service/containers/)?

我在 Azure App Services 上运行了一堆基于 docker 的微服务,并且几乎没有遇到任何问题,并且允许我解决 OOB App Service 产品的其他限制特性。

@ikemtz gRPC 在使用 kestral 时工作(即:在容器中运行时)。

@rupeshtech谢谢,但您的文章与该问题无关。

此问题适用于在 IIS 或 Azure 应用服务中托管 gRPC(或任何使用尾随标头的应用)。

如果这是对文档的一个大胆的警告,那就太好了......

aspnet/AspNetCore.Docs#14684

现在已实施

@ikemtz我试图在运行在 Azure Web App for Containers 中的 Linux 容器中运行 gRPC 的基本测试,但它对我不起作用。 在任何地方都找不到任何报告的错误,但容器甚至不会响应 HTTP ping。
这是一个耻辱。 我不准备仅仅为了获得这个功能而转向 AKS,所以我想我现在会坚持使用良好的老式 HTTP 服务。

@searus如果您使用虚拟机代替(在 azure 中运行)

@GoranHalvorsson我不准备从 PaaS 迁移到 IaaS 只是为了利用这项技术。 我会等到 Azure 应用服务支持这一点。

@davidfowl有这方面的路线图吗?

使用 Kestral 部署到容器很好,但说起来很容易
在 IIS 中使用 Lets Encrypt 或真正让我退缩的应用服务。
如果有任何关于如何使用让运行自定义域的简明指南
在容器中的红隼上加密然后我首先跳入 gRPC 头
否则很难证明创建一些自定义的开销是合理的
部署只是为了适应新的堆栈。

2019 年 10 月 16 日星期三上午 6:46 Russell Seamer [email protected]
写道:

@GoranHalvarsson https://github.com/GoranHalvorsson我还没准备好
从 PaaS 迁移到 IaaS 只是为了利用这项技术。 我只会
等到 Azure 应用服务可以支持这一点。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/aspnet/AspNetCore/issues/9020?email_source=notifications&email_token=AMNAZYUWLYLGC5ZGB4GAFITQO2TCFA5CNFSM4HDHMSDKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBLFDDI#issuecomment-542527885 ,
或退订
https://github.com/notifications/unsubscribe-auth/AMNAZYTKUYYBWKSW6AMQDHTQO2TCFANCNFSM4HDHMSDA
.

有了这个,Azure Functions 和其他任何位于 App Service 之上的东西都不能真正使用 gRPC 和 HTTP/2。 时间表会很好,即使是私人/公共预览。

我们目前正在处理 http.sys 中的更改。 之后,我们需要对 IIS 和 ARR 中的这些更改做出反应。 然后我们需要更新在应用服务中运行的 Windows 版本,以利用 IIS 中的这些更改。

工作已经表明,但很难估计客户需要多长时间才能得到它。 随着事情的进展,我们会及时通知您。

我觉得这是我并不感到惊讶的事情(实现新的 http 功能需要内核更新)。 显然 IIS 在 Linux / macosx 上不存在,但如果将对 grpc 的支持添加到其他操作系统的其他服务器中,我会感到惊讶......需要很多内核更新的方式。

也许这是一个体面的论点/解耦的例子......只是说

我觉得这是我并不感到惊讶的事情(实现新的 http 功能需要内核更新)。 显然 IIS 在 Linux / macosx 上不存在,但如果将对 grpc 的支持添加到其他操作系统的其他服务器中,我会感到惊讶......需要很多内核更新的方式。

也许这是一个体面的论点/解耦的例子......只是说

我同意。 这可能与运行一些与内核直接相关的低级协议的 IIS 有关。 这看起来确实很奇怪,但至少我们已经确认这项工作正在进行中,并且采用并不完全是蓝天。

还记得您必须升级到 Windows 8 才能获得 WebSocket 支持吗? 我也是😄

是的,我们记得! 这是独家新闻:gRPC 是在 .NET-Core 中发布的,我们使用 Azure 应用服务,因此有一些选项很重要,至少要尽快进行测试。 谁能告诉我们何时会在 Azure 应用服务中同步到已发布的 .NET-Core 功能? 或者可行的解决方法。 谢谢

感谢您与我们联系。 由于在此问题上没有任何活动,我们将关闭它以保持我们的积压工作干净。 如果您认为存在与 ASP.NET Core 框架相关的问题,但尚未解决,请提交新问题。

@anurse我们如何保持这个问题开放?

它被放入讨论并标记为问题。 重新打开。

有这方面的ETA吗?

是否有任何可行的替代方案可以让 gRPC 在生产环境中工作?
我看过一些东西,似乎将它托管在 AKS 上是一种选择,我只是想确保我们没有做那些无助于我们解决问题的事情。

我们目前一直在尝试为这些项目运行某种生产环境:
通过 gRPC 与 API 对话的 IdentityServer 项目
5 个通过 gRPC 与 API 对话的门户网站
通过 gRPC 与 Discord Bot (ASP.NET Core) 对话的 API。

我们尝试将它们托管在 VPS 上,但如果我们希望所有这些应用程序都运行在同一个 VPS 上,我不知道我们是否可以仅使用 kestrel 在生产环境中托管它们。

有没有人可以选择我们,所以我们可以在 1 个 VPS 上拥有多个域(1 个域,其余是子域)和 1 个 IP 地址,仅使用 Kestrel 运行所有项目(因为 IIS、Http.Sys、视窗)。

(或任何其他使我们能够尽快托管所有这些的方法)

提前致谢!

(编辑)

我们使用 Let's Encrypt ( https://github.com/natemcmaster/LetsEncrypt ) 来获取 SSL 证书

(编辑 2)
我们还尝试在推特上联系@davidfowl
https://twitter.com/DapperDino4/status/1204119195765682177
https://twitter.com/DapperDino4/status/1204119695344971778

有这方面的ETA吗?

添加一直致力于此的@shirhatti@Tratcher

现在很难确定这个时机。 IIS 是一个 Windows 组件,它依赖于 http.sys,它也是一个 Windows 组件。 IIS 和 http.sys 都没有足够的 HTTP/2 功能来支持 gRPC。 我们一直在与这些团队密切合作以进行更改,他们都在为即将发布的版本做好准备,但要等到具有适当更改的 Windows Server 版本上线后才能使用。

@JamesNK您能谈谈 gRPC-web 等替代方案的可用性吗?

不知道 gRPC-Web 是什么的人的上下文: https://grpc.io/blog/state-of-grpc-web/。 因为它使用 HTTP/1.1,所以 Azure 应用服务限制不适用于它。 缺点是没有 HTTP/2 的好处(多路复用、标头压缩),也没有客户端或双向流。

gRPC-Web 特使反向代理现在可用,但这并不容易设置。 并且没有 .NET gRPC-Web 客户端。

ASP.NET Core 团队尚未决定是否正式承诺支持 gRPC-Web。 我现在正在研究 gRPC-Web,以及它在 .NET Core 中的样子。 几周后我可以说更多,也许会有一个实验性的预览供人们在一月份试用。

既然 IIS 不支持这个,netcore gRPC 服务可以托管在 Nginx 后面吗?

@Dennis-Petrov 我就是这样做的。 我遵循了这个文档https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-3.1并且 gRPC 运行良好

我可以问一个愚蠢的问题:为什么这在 Linux 应用服务计划上的 Azure 应用服务中不起作用?

IIS 是否也参与其中?

@searus无论Linux / Windows,前端和应用程序服务之间都有共同的层。 即当前应用服务前端接收 HTTP/2 连接,然后内部连接作为“旧”HTTP 代理到各个应用服务工作者。 我确信它正在全力支持 gRPC,但由于内部组件需要更新、测试和发布,因此需要付出一些努力。

谢谢@devlead。
我(也许天真地)认为 Linux 应用程序服务计划是整个 Linux 的。
我非常感谢这里所涉及的努力,并感谢您花时间解释。

我确信它正在全力支持 gRPC

它肯定在工作中。 我们正在积极努力,但不能保证时间表(这里有多个独立的团队需要协调)。 @devlead关于 Azure 应用服务 Linux 支持是正确的。 前端代理正在运行 IIS。 它支持从客户端接收 HTTP/2,但是当它代理到您的应用程序的流量时,它会降级到 HTTP/1.1。 这对于普通应用程序来说是可以的(虽然不是理想的),但由于 gRPC需要HTTP/2 功能,它不适合那些。

是的,我已经构建了一个作为通用托管服务运行的服务。 我已将它移植到新的 asp net core 3 模板并让它在自托管的 kestrel 上运行,但目前正在考虑将其托管在 iis 后面,并希望将其部署为 Azure 中的应用服务。 我无法让前者(iis)工作。

@moodya你能和我们分享你是怎么做到的吗?

是的,我已经构建了一个作为通用托管服务运行的服务。 我已将它移植到新的 asp net core 3 模板并让它在自托管的 kestrel 上运行,但目前正在考虑将其托管在 iis 后面,并希望将其部署为 Azure 中的应用服务。 我无法让前者(iis)工作。

@moodya你能和我们分享你是怎么做到的吗?

默认情况下,gRPC 模板是自托管的 kestrel。 由于此线程中概述的原因,它不会在应用程序服务中工作。

虽然它不能托管在应用服务中,假设我们在 aks 上托管 grpc 服务,从应用服务调用 grpc 有什么问题吗? grpc 客户端至少会在应用服务上工作吗?

虽然它不能托管在应用服务中,假设我们在 aks 上托管 grpc 服务,从应用服务调用 grpc 有什么问题吗? grpc 客户端至少会在应用服务上工作吗?

是的,客户应该工作。 该限制仅针对入站请求,而不是出站请求。

也许是愚蠢的问题,但是如果我在 IIS Express 的调试中运行 gRPC 服务,为什么它会起作用? 例如,我有一个 Web 应用程序(Razor Pages,.net core 3.1),它调用 gRPC 服务 [从与 wcf 服务对话的框架 mvc 应用程序升级,如果有人关心的话]。 如果我在我的工作站上调试它们,使用 IIS Express 中的 gRPC 服务,webapp 可以很好地与服务通信。 由于上面描述的代理行为@anurse ,当服务托管在 IIS 中时,我得到 gRPC 需要 HTTP/2 的异常。 IIS Express 代理到 Kestrel 的方式与 IIS 不同吗?

此外,也许不是这个地方,但我想谦虚地请求下面的页面对 IIS/App Service 代理行为进行一个小的解释。 我(也许是愚蠢地)花了一整天的时间试图超越 IIS,因为我认为如果应用程序在 Kestrel 中运行出进程外,我可以强制它在 HTTP/2 中代理https://docs.microsoft.com/en-我们/aspnet/core/grpc/aspnetcore?view=aspnetcore-3.1&tabs=visual-studio#integration -with-aspnet-core-apis

IIS Express 不能工作的原因与 IIS 不能工作的原因相同。

@Tratcher啊,是的,你是对的。 我将 gRPC 服务作为自托管而不是 IIS Express 运行。 谢谢!

有没有人有关于如何在 AKS 中使用它的教程? (在本地使用 aks 中的 vs 代码进行调试的奖励积分,而无需重建容器,以便我们拥有整个堆栈与 .net 核心开发,通过使用 azure devops 和 aks 部署到 azure)。

最重要的是,您在 AKS 中使用什么来将 Web 流量代理到 AKS pod,而不必在 pod 本身中使用 ngix(即天蓝色负载均衡器或其他东西?)

虽然它不能托管在应用服务中,假设我们在 aks 上托管 grpc 服务,从应用服务调用 grpc 有什么问题吗? grpc 客户端至少会在应用服务上工作吗?

是的,客户应该工作。 该限制仅针对入站请求,而不是出站请求。

不幸的是,当托管在 Azure Web 应用程序上时,基于 .Net Core 3.1 的 Web 应用程序调用 grpc 服务(在本例中为运行在 VM 上的 Pyhton 代码)似乎并非如此 - 超时。 当从 localhost 运行完全相同的代码时,调用会通过(相同的服务 VM)。

@lyulyok你能收集诊断信息并打开一个单独的问题吗? 这里的客户端没有已知问题。

有没有人有关于如何在 AKS 中使用它的教程?

请打开一个新问题来讨论这个问题或在Stack Overflow上提问。 让我们保持这个线程的主题,特别是因为有很多人对 IIS 和 HTTP.sys 上的 gRPC 的状态感兴趣,并且每条评论都会对所有参与其中的人进行 ping 操作。 我将隐藏偏离主题的评论,如果您有其他问题,请随时发布新问题

是的,我已经构建了一个作为通用托管服务运行的服务。 我已将它移植到新的 asp net core 3 模板并让它在自托管的 kestrel 上运行,但目前正在考虑将其托管在 iis 后面,并希望将其部署为 Azure 中的应用服务。 我无法让前者(iis)工作。

.NET 中对 gRPC-Web 的实验性支持现已推出。 gRPC-Web 与 HTTP/1.1 和 HTTP/2 一起工作,它在 IIS 和 Azure 应用服务中运行。

我们将继续致力于在 Azure 应用服务中运行 HTTP/2 gRPC,但 gRPC-Web 是您今天可以使用的东西。 在 IIS 和 Azure 应用服务中支持 HTTP/2 的工作完成后,将 .NET 应用从 gRPC-Web 切换到 HTTP/2 gRPC 将是一个简单的过程。

博文: https ://devblogs.microsoft.com/aspnet/grpc-web-experiment
文档: https ://docs.microsoft.com/aspnet/core/grpc/browser

我有 grpc 客户端在应用程序服务中运行,并且服务在 aks 中运行得很好,以防其他人也想尝试

@andrew-vdb 你能发布配置吗?

@JamesNK
与您的评论有关https://github.com/dotnet/aspnetcore/issues/9020#issuecomment -579597202 以及 gRpc-Web 目前似乎是_一个实验项目,而不是一个承诺的产品。_

  • 我需要 gRpc-Web 来部署到 IIS 吗? 否则,根本就不可能吗?
  • 您是否有关于何时可以在没有 gRpc-Web 的情况下部署到 IIS 的 ETA?
  • 当微软正式支持 gRpc-Web 时,你有 ETA 吗?

我需要 gRpc-Web 来部署到 IIS 吗? 否则,根本就不可能吗?

目前 gRPC over HTTP/2 在 IIS 中不起作用。 gRPC-Web 确实有效。

您是否有关于何时可以在没有 gRpc-Web 的情况下部署到 IIS 的 ETA?

不会。对 Windows 进行更改并将其发布给公众需要时间。

当微软正式支持 gRpc-Web 时,你有 ETA 吗?

现在不行。

供参考
我有一个应用程序(ASP.Net Core 3.2.0-Preview1),我在其中将 REST API DAL 更改为 gRPC-Web DAL。 我遵循了 Steve Sanderson 博客文章的指导。 我的解决方案可以作为 CSB 或 SSB 运行,并且我在两种配置中都成功使用了 gRPC-Web(我确实必须升级到更新版本的 gRPC.* nuget 包)。

我错误地从夜间构建中进行了进一步更新,目前我的 gRPC 包都在版本 2.28.0-dev202003020801。 我说错了,因为我的两个工作解决方案部署都失败了。

SSB - 客户端报错“未处理的异常渲染组件:无法加载文件或程序集'System.Text.Json,Version=4.0.1.1,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51'。系统找不到指定的文件。 "
通过简单地将 System.Text.Json (4.7.1) 的显式 nuget 包添加到我的 Web 服务器项目,此错误消失并且一切正常。
[编辑] 从 NuGet 源返回到所有 gRPC.* 包的版本 2.27.0/2.27.0-Pre1 解决了这个问题。

CSB - 在客户端收到第一个 gRPC-Web 响应时,我收到错误“WASM: Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Bad gRPC response. Response protocol downgraded to HTTP /1.1.")"。 我没有解决此问题的方法,但这并不重要,因为我们会在 CSB 发布之前发布 SSB。
[编辑] 从 NuGet 源返回到所有 gRPC.* 包的版本 2.27.0/2.27.0-Pre1 解决了这个问题。

抱歉冗长,但最后,有两个问题:

  • 是否可以在 gRPC/gRPC-Web 中使用另一个 json 序列化器/反序列化器?
  • gRPC/gRPC-Web 包是否会与 ASP.Net Core 3.2-Preview 2 “对齐”,还是需要访问每晚构建?

@JamesNK
我的客户已迁移到 gRpcWeb,但我们发现了一个重要限制(我没有从中找到任何文档):最大消息大小为 3067 个字符。
如果从基本 gRpc 服务的普通客户端服务转换为 gRpc-Web,则此行将失败(因为字符串为 3068 个字符,超过限制 1):

// 配置一个通道以使用 gRPC-Web
var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
// 端口号(5001)必须与 gRPC 服务器的端口匹配。
使用 var channel = GrpcChannel.ForAddress(" https://localhost :5001", new GrpcChannelOptions
{
HttpClient = 新的 HttpClient(处理程序)
});
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(new HelloRequest { Name = new string('A', 3068 ) });
Console.WriteLine("问候语:" + reply.Message);
Console.WriteLine("按任意键退出...");
Console.ReadKey();

我附上了一个包含客户端和服务器的复制解决方案。
GrpcWeb.zip

具有 normale gRpc 的等效项目能够毫无问题地处理 20k 的消息。
如果我可以配置一些东西来消除这个限制,你能告诉我吗?

@curia-damiano 你能提出一个新问题吗? 让我们继续讨论在 IIS/Azure 应用服务上支持gRPC没有gRPC-Web)的具体功能。 gRPC-Web 是在此线程中较早提出的,因为它是一个很好的替代方案,但我想让线程专注于原生 gRPC 支持的主要目标。

@MarkStega您还可以就您的问题提出新问题吗? 让我们尽量避免这个线程因多个可能的主题而过载(即使它们是相关的)。 此问题正在跟踪 IIS/Azure 应用服务上的本机 gRPC支持

当 gRPC 将在 Azure 应用服务上可用时,我们可以有一个 ETA 吗?

我们没有任何 ETA 更新。 当我们确实有 ETA 时,我们将更新此线程。 这需要对 Windows 进行更改,我们正在与该团队合作,试图尽快将它们落实到位,但他们的日程安排不受我们的直接控制。

我们可以构建一个 gRPC 服务,它被打包为一个容器并在 Azure 容器的 Web 应用程序中运行吗?

@fgheysels不。 作为代理,它仍然落后于 IIS,无法处理所需的 HTTP/2 功能。

目前有3种方法可以做到这一点:

  1. 公开公共 IP 并使用 VM。
  2. 将 Kubernetes 与 Azure 应用程序网关入口一起使用(指令失败,因为 helm 脚本已过期,因此现在无法使用)或使用 nginx 入口(您失去了防火墙和 DoS 缓解措施)
  3. 使用 Azure 容器服务并将其公开给公共 IP 或使用 nginx 对其进行反向代理或使用 Azure 应用程序网关对其进行反向代理。

没有其他东西会起作用。

@JohnGalt1717

使用 Azure 容器服务并将其公开给公共 IP 或使用 nginx 对其进行反向代理或使用 Azure 应用程序网关对其进行反向代理。

Azure 应用程序网关当前无法工作。 它具有相同的限制

我猜我们可以用我们的 .net 代码在 gpogle 云上运行吗?

2020 年 4 月 1 日,星期三,上​​午 7:26,Sourabh Shirhatti, notifications @github.com
写道:

@JohnGalt1717 https://github.com/JohnGalt1717

使用 Azure 容器服务并将其公开给公共 IP 或使用 nginx
反向代理它或使用 Azure 应用程序网关反向代理它。

Azure 应用程序网关当前无法工作。 它具有相同的
局限性


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-606855605
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7LVZJTQ2QPRHVB5G5TRKJGYLANCNFSM4HDHMSDA
.

@shirhatti好的,所以这只会变得更糟。 Microsoft 有效地做到了,因此带有 gRPC 的 .NET 不能在 Microsoft Azure 上运行。 如果不是那么难过,那就太有趣了。

所以这里是更新的列表:

  1. 公开一个公共 IP 并使用一个虚拟机(在虚拟机上放置 haproxy、nginx 或其他东西来反向代理它)
  2. 将 Kubernetes (AKS) 与 nginx 入口一起使用。

我不相信 ACS 会起作用,因为如果有记忆,它仍然会将 IIS 放在它前面。

并且#2 也可能不起作用,因为负载均衡器也可能是 Windows 上的 IIS……有人真的让它在 Azure 的任何地方工作吗?

我认为这张 github 票定义了我几个月来一直在谈论的关于 .NET 团队的内容以及正在发生的事情。

Microsoft 有效地做到了,因此带有 gRPC 的 .NET 不能在 Microsoft Azure 上运行。 如果不是那么难过,那就太有趣了。

这里没有特定于 .NET 的内容,限制在于与 HTTP/2 相关的 Windows 和 Azure 基础架构。 Azure 中的其他 webstack 也会遇到同样的问题。 Windows 和 Azure 正在努力解除对我们的阻碍,但它需要对基本组件进行更改,这需要很长时间才能重新部署。

这一切都与.net 直接相关。 它在 azure 和 .net 网站上字面意思是 .net 是 azure 的语言。

但是您不能在 Azure 中使用该语言,但可以在 AWS 和 Google 云上轻松使用它。

令人尴尬的是,最近 .net 团队发生了如此多的大规模搞砸,但他们的傲慢却毫无道理地达到了历史最高水平。

除了使用 gRPC web 之外,他们甚至没有给我们任何类型的工作,这是一个 poc 而非真正的产品。

是的,但我们可以在谷歌云上运行所有的 .net 堆栈,.net 支持
gRPC 一切正常。 所以我不介意在 GPC 上运行,直到他们可以解决这个问题
在 Azure 上。
我开发应用程序服务或无服务器应用程序,我对任何都不感兴趣
容器解决方案,因为它们对于大规模部署来说成本太高
我有。

2020 年 4 月 1 日,星期三,上​​午 9:57 James Hancock [email protected]
写道:

这一切都与.net 直接相关。 它字面意思是在天蓝色和
.net 是 azure 语言的网站。

但是您不能在 Azure 中使用该语言,但可以在 AWS 和
谷歌云轻松。

.net 团队出现了如此多的重大失误,这令人尴尬
最近,他们的傲慢毫无道理地达到了前所未有的高度。

他们甚至没有给我们任何类型的工作,除了使用
gRPC web 这是一个 poc 不是真正的产品。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-606927717
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7MRPFQBH52XDHUNP63RKJYMVANCNFSM4HDHMSDA
.

首先微软应该被你刚才所说的吓坏了。

其次,我刚刚使用虚拟节点将我们的 Web 内容切换到 azure kubernetes,它的成本大约是应用服务成本的一半,并且性能提高了一倍。

Aks 是一堆不能正常工作的东西,而且文档过时,但是一旦您获得了托管身份,并且公共 IP 到位,剩下的就很简单了。

是的,但这对微软来说是一个非常大的变化! 我喜欢
gRPC 的简单性虽然我可能会切换到 http Rx。 我无法得到我的
websocket 解决方案似乎有 SSL/TLS 问题。
看起来我可以以与我的 S1 应用服务相同的成本获得 azure kubs,
必须检查性能。

2020 年 4 月 1 日,星期三,上​​午 10:13 James Hancock [email protected]
写道:

首先微软应该被你刚才所说的吓坏了。

其次,我刚刚将我们的网络内容切换到 azure kubernetes
虚拟节点,它花费了我们大约一半的应用程序服务成本
我们并具有双倍的性能。

Aks 是一堆不能正常工作且过时的东西
文档,但一旦您获得托管身份和公共 IP
其余的都是直截了当的。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-606933338 ,
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7O3N4XVCWM5MGCTS33RKJ2I7ANCNFSM4HDHMSDA
.

这一切都与.net 直接相关。 它在 azure 和 .net 网站上字面意思是 .net 是 azure 的语言。

这显然不是真的。 底层 TCP 和 HTTP 堆栈不是使用 .NET 编写的。 Microsoft 正在努力调整他们的 gRPC 基础。 这是一种复杂的交付方式,它对 Windows 服务器上运行的所有东西都有连锁反应,包括 Azure 本身。

令人尴尬的是,最近 .net 团队发生了如此多的大规模搞砸,但他们的傲慢却毫无道理地达到了历史最高水平。

这种毫无意义的、幼稚的无意义的抱怨是完全没有必要的。 这与 .NET 团队无关。 他们将大部分 gRPC 本地移植,因此我们可以在 PoC 上工作并在必要时使用变通方法,并且像成熟的成年人一样,我们将等到基础平台准备好交付最终部分。

@oiising

.NET 是 Azure 的语言。 微软如此推销它。 Azure 无法理解 .NET gRPC。 这是 100% 真实的。 它在发布时不可用,一年后更糟,这是一个彻底的失败。 堆栈不是由Microsoft内部的 .NET 团队编写的,这无关紧要。 微软就是微软。 我不在乎他们的小领地和人为的界限和不结盟的优先事项。 我关心真正有效的最好的产品。 我不在乎微软声称,因为 .NET 是开源的,不知何故不再使其成为付费产品。 它是一种付费产品。 我只是通过使用 Azure、Office 和 Windows 间接付费。

不,我们不会等待。 我们将转移到另一个可以运行的云提供商。 这是微软无休止地推动的。 见鬼,我有一个 Microsoft 支持人员,我说“如果你不喜欢 [我们在运行时通过设计破坏了这个事实],你可以去使用其他人的产品”给大约 100 名客户。 是的,我知道到目前为止有 8 家完全按照他们的建议行事,还有 30-40 家正在调查这样做。 一位支持代理对 MS 的估计收入损失约为 280 万美元,而且还在增加。

是的,这正是我们都要做的。 感谢微软的建议。 我们将离开 Azure,如果领导层不尽快搞清楚,我们将离开 .NET。

他们必须担心的是,当像我这样的人不再抱怨这些他们不为他们承担责任的大规模公共失败时,他们什么也没听到,每个人都不在乎。 它发生在大约一年前,当时 Xamarin Forms 持续了 18 周,无法使用 Xamarin Forms 和 Xamarin 的相同版本构建到 Apple Store、Android Store 和 Windows Store。 我发布了,他们承认了,18 周后,尽管这是一个完整的休息时间,但只有 1 人关注了错误报告,而不仅仅是一个边缘案例。 为什么? 没有人关心 Xamarin Forms 并离开并开始使用非 Microsoft 工具,Microsoft 失去了桌面和手机。 (并且继续尝试同样失败的方法来赢回它,即使是 Neo 和 Duo)现在人们仍然认为他们在 .NET 中有发言权,他们的抱怨不会被置若罔闻,这些东西会得到解决。 .NET 领导层非常努力地表明情况并非如此,结果将与 Xamarin Forms 相同。

预告片标题部分是我们发现自己比 Stack Overflow 所想的更迫切需要的东西。 我们可以在这里帮助确定优先级吗?

用例

我们通过服务器标头进行计时,以在我们的 HTTP 日志(在 HAProxy 中)中捕获它们。 我们有几个标头,例如X-Sql-DurationMsX-Sql-CountX-Reds-DurationMs等,以便我们可以捕获它们并记录它们,并汇总它们的指标。 如果更多细节有帮助,这篇博文中有一个部分。 这在 ASP.NET MVC 5(完整框架)中运行良好,因为整个响应都被缓冲了。 由于我们在视图中进行的查询很少,因此这是一个准确率约为 99% 的计时策略,总体上运行良好。

现在我们在 .NET Core 上运行,一切都在流式传输。 这样做的问题是,由于缺少缓冲,计时标头在完成之前就已发送。 这是一个艰难的权衡。 如果我们可以将这些时间作为预告片头发送和捕获,这将很快得到解决。 但似乎我们在这里遇到了 IIS 阻止程序,我们受制于升级(或我们离开 IIS)以使此功能正常工作。

就个人而言,我还有其他用途,例如 MiniProfiler 发送Server-Timing标头(它已经准备好等待大约 3 年了)。

我们如何帮助优先处理这件事? 是否有任何其他用例可以帮助改变它?

谢谢@NickCraver。 这项工作已经是高优先级并且正在进行中,但是将其部署到 AppService 等服务很复杂,而且还需要一段时间。

无论 Azure 是否推出,是否有可能很快在 IIS 中得到支持? ——我真的只需要一个 IIS 中的客户端——如果这很重要的话。 那么IIS可以成为http2客户端吗?

我必须同意,令人担忧的是,微软员工似乎不可能采取行动(或此时打电话)并转到另一个团队。 只是让他们非常恼火,以至于他们在一天内就部署了一个修补程序。
如果 asp / .net 团队没有推动 grpc,那么这个等待期就可以了。 但是,既然您正在销售一种无法用于生产的产品,那么可悲的是,现在是采取绝望措施和打破行列的时候了。

如果你在乎,你会做到的。

编辑:我知道“一天”被夸大了,但已经一年了!

是否有任何文档解释如何将 gRPC 部署到 Azure? 至少使用AKS? 有东西就好了。

是否有任何文档解释如何将 gRPC 部署到 Azure? 至少使用AKS? 有东西就好了。

@lumogox我创建了一个逐步指南来将 gRPC 部署到 Azure。
https://github.com/rupeshtech/k8s-grpc-dotntecore

@rupeshtech我实际上查看了您的指南,但是,如果您想在端口 80 的根路径中显示消息,则它不起作用。

很棒的东西,但我想部署在应用服务上,但我们仍然没有 ETA。
其他人之一声称 AKS 比 app 便宜
服务,我觉得很难相信?
无论如何,我只想使用应用服务或无服务器基础架构。

2020 年 5 月 12 日星期二下午 5:51 Luis Molina [email protected]
写道:

@rupeshtech https://github.com/rupeshtech我实际上看过
但是,如果您想在
端口 80 中的根路径。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-627175783
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7MUWWWYCGMEK2FH663RRD5YPANCNFSM4HDHMSDA
.

AKS:b12,2 节点集群每月 176 美元,让您获得像 p3 一样的性能。

您需要以下内容才能完成这项工作:

  1. nginx 入口作为反向代理。
  2. Dockerized .net 核心应用
  3. .net 核心应用的部署模板
  4. 这些部署的服务模板
  5. 映射您的 dns 条目的入口模板
  6. 用于 k8s 的 cert bot 或您自己的证书以映射到入口。
  7. 仅在您的 .net 应用程序中关闭 SSL,它将与 RP 发生冲突并在 .net 核心中打开代理支持。
  8. 公共IP
  9. Azure 容器注册表

现在在 Azure 中配置它需要 30 部分过程,几乎没有一个可以通过 GUI 门户完成。 他们缺少关联容器注册表、配置入口提供程序(Azure 应用程序网关、nginx 或 haproxy 等。有任何 gui 来设置它。服务主体的东西和其他资源都没有正确自动化,也没有托管标识的东西正确自动化(你出于深不可测的原因需要两者)。

如果您正在执行通配符证书,那么您还需要通过 certbot k8s 服务支持的 dns 提供商之一访问您的 DNS。

这是我们用于设置环境的脚本,可以帮助您入门:

Azure 配置

  1. 创建 AKS
  2. az aks install-cli(如果您还没有)
  3. az aks get-credentials --resource-group RGL-\ --name XX-AKS-\
  4. az network public-ip create --resource-group MC_RGL-\ _XX-AKS-\ _eastus --name PIP-AKS-\ --sku 标准 --allocation-method static --query publicIp.ipAddress -o tsv
  5. 将 api、www、admin 映射到 DNS 中的公共 ip(即 beta.XX.com)
  6. az 身份创建 -g RGL-\ -n XX-MI-AKS-\ -o json(记录 ClientId、PrincipalId、Id 和名称)
  7. az 角色分配创建 --role 读者 --assignee \ --范围/订阅/\ /资源组/RGL-\
  8. 从 Azure Active Directory 应用程序获取服务主体信息:XX-AKS-\ SP-xxxx(记录名称、客户端 ID)
  9. 创建一个没有过期的客户端密码并记录下来
  10. az role assignment create --role "Managed Identity Operator" --assignee \ - 范围 ”\ "
  11. 获取 dns 区域 id:az network dns zone list --query "[].{ id: id, name: name}"
  12. az 角色分配创建 --assignee \ --role 贡献者 --scope \
  13. az 角色分配创建 --assignee \ --role 贡献者 --scope \
  14. az aks update -n XX-AKS-\ -g RGL-\ --附加-acr clcr\
  15. 添加托管标识 (XX-MI-AKS-\ ) 到密钥保管库

Kubernetes 让我们加密(如果不是生产环境)

  1. kubectl 创建命名空间入口基础
  2. helm repo 添加稳定的 https://kubernetes-charts.storage.googleapis.com/
  3. helm install nginx-ingress stable/nginx-ingress --namespace ingress-basic --set controller.replicaCount=2 --set controller.nodeSelector."beta.kubernetes.io/os"=linux --set defaultBackend.nodeSelector." beta.kubernetes.io/os"=linux --set controller.service.loadBalancerIP="\ "
  4. 验证它需要:kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-controller
  5. kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.3/cert-manager.yaml
  6. 使用订阅和服务原则 ClientId 更新 issuer.yaml
  7. 将 certificate.yaml 更新为 dns 地址
  8. 使用域信息等更新 ingress.yaml。
  9. 制作 Base64 版本的 Service Principal Secret:echo \ | openssl base64
  10. 使用密钥更新secure-dazuredns.yaml

或 Kubernetes Azure 应用程序网关

  1. 不工作。 完全一团糟

完成 Kubernetes 配置

  1. kubectl apply -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
  2. 使用注册表、密钥库、环境和检测密钥更新部署 API
  3. 在部署门户和部署管理员中更新注册表
  4. 更新 identity-binding.yaml 中的值(ClientId 也来自上面的托管标识)
  5. kubectl 创建命名空间 XX
  6. kubectl config set-context --current --namespace=XX
  7. kubectl 应用 -k ./\
  8. 验证证书是否可用:kubectl describe certificate XX-tls-secret

是的,这真的很难。 不,在 k8s 中没有更简单的方法。 您唯一的其他选择是具有公共 IP 并在您的应用程序前面使用 RP 的 VM。 您可以使用 Linux VM 并在其上运行 docker,然后将 HAproxy 和您的应用程序安装在一个 docker 容器中,并使用单个 docker-compose 文件非常容易。

否则,在他们开始将内核从 Windows 2004(2020 年春季)推出到 Azure 之前,你会被搞砸。 (假设它在那里并且不会延迟到 11 月)

哇,伙计,真是太棒了,谢谢,但因为我也是
采用 NoOps 方法的 Azure Dev Ops 我真的觉得 AKS 不在
我的联赛。
尤其是当我可以用更少的钱运行一个像样的应用程序服务时
比起那个来说。 或者将其切换到 Azure 函数。 我无法获取我的 websocket
部署到 Azure 的解决方案。
我也是 Reactive Extensions 的忠实粉丝,并且有一些不错的 Rx
像这样的工具
https://github.com/lucassklp/Rx.Http
虽然不确定这个的可扩展性

2020 年 5 月 12 日星期二晚上 10:09 James Hancock [email protected]
写道:

AKS:b12,2 节点集群每月 176 美元,让您获得像 p3 一样的性能。

您需要以下内容才能完成这项工作:

  1. nginx 入口作为反向代理。
  2. Dockerized .net 核心应用
  3. .net 核心应用的部署模板
  4. 这些部署的服务模板
  5. 映射您的 dns 条目的入口模板
  6. 用于 k8s 的 cert bot 或您自己的证书以映射到入口。
  7. 仅在您的 .net 应用程序中关闭 SSL,它将与 RP 和
    打开 .net 核心中的代理支持。
  8. 公共IP
  9. Azure 容器注册表

现在和虚拟地在 Azure 中配置它是一个 30 部分的过程
这些都不能通过 GUI 门户完成。 他们缺少关联
容器注册表,配置入口提供程序(Azure 应用程序
网关、nginx 和 haproxy 等都有任何 gui 来设置它。 没有任何一个
具有其他资源的服务主体内容,也不是托管身份内容
要么正确地自动化(并且出于深不可测的原因您需要两者)。

如果您正在执行通配符证书,那么您还需要访问您的 DNS
通过 certbot k8s 服务支持的 dns 提供商之一。

这是我们设置环境的脚本,可以帮助您获得
开始:
Azure 配置

  1. 创建 AKS
  2. az aks install-cli(如果您还没有)
  3. az aks get-credentials --resource-group RGL- --name XX-AKS-
  4. az network public-ip create --resource-group MC_RGL-_XX-AKS-_eastus
    --name PIP-AKS- --sku 标准 --allocation-method 静态 --query
    publicIp.ipAddress -o tsv
  5. 将 api、www、admin 映射到 DNS 中的公共 ip(即 beta.XX.com)
  6. az identity create -g RGL- -n XX-MI-AKS- -o json(记录
    ClientId、PrincipalId、Id 和名称)
  7. az role assignment create --role Reader --assignee --scope
    /subscriptions//资源组/RGL-
  8. 从 Azure Active Directory 应用获取服务主体信息:
    XX-AKS-SP-xxxx(记录名称、客户端 ID)
  9. 创建一个没有过期的客户端密码并记录下来
  10. az role assignment create --role "Managed Identity Operator"
    --assignee --scope ""
  11. 获取 dns 区域 id:az network dns zone list --query "[].{ id:
    身份证,姓名:姓名}"
  12. az 角色分配创建 --assignee --role 贡献者 --scope
  13. az 角色分配创建 --assignee --role 贡献者 --scope
  14. az aks update -n XX-AKS- -g RGL- --attach-acr clcr
  15. 将托管标识 (XX-MI-AKS-) 添加到 Key Vault

Kubernetes 让我们加密(如果不是生产环境)

  1. kubectl 创建命名空间入口基础
  2. helm repo 添加稳定
    https://kubernetes-charts.storage.googleapis.com/
  3. helm install nginx-ingress stable/nginx-ingress --namespace
    ingress-basic --set controller.replicaCount=2 --set
    controller.nodeSelector."beta.kubernetes.io/os"=linux --set
    defaultBackend.nodeSelector."beta.kubernetes.io/os"=linux --set
    控制器.service.loadBalancerIP=""
  4. 验证它需要:kubectl --namespace ingress-basic get services -o
    宽 -w nginx-ingress-controller
  5. kubectl 应用 --validate=false -f
    https://github.com/jetstack/cert-manager/releases/download/v0.14.3/cert-manager.yaml
  6. 使用订阅和服务原则 ClientId 更新 issuer.yaml
  7. 将 certificate.yaml 更新为 dns 地址
  8. 使用域信息等更新 ingress.yaml。
  9. 制作 Base64 版本的 Service Principal Secret:echo | openssl
    base64
  10. 使用密钥更新secure-dazuredns.yaml

或 Kubernetes Azure 应用程序网关

  1. 不工作。 完全一团糟

完成 Kubernetes 配置

  1. kubectl 应用 -f
    https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
  2. 使用 registry、keyvault、Environment 和
    仪表键
  3. 在部署门户和部署管理员中更新注册表
  4. 更新 identity-binding.yaml 中的值(ClientId 也来自
    上面的托管标识)
  5. kubectl 创建命名空间 XX
  6. kubectl config set-context --current --namespace=XX
  7. kubectl 应用 -k ./
  8. 验证证书是否可用:kubectl describe certificate XX-tls-secret

是的,这真的很难。 不,在 k8s 中没有更简单的方法。 您的
唯一的其他选择是具有公共 IP 的 VM 并在您的前面使用 RP
应用程序。 您可以使用 Linux VM 并在其上运行 docker,然后安装 HAproxy 和
你的应用程序在一个带有单个 docker-compose 文件的 docker 容器中
容易地。

否则你会被搞砸,直到他们开始推出内核
Windows 2004(2020 年春季)到 Azure。 (假设它在那里
不会推迟到 11 月)


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-627302354
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7P74W4DK5RP2BKKI7LRRE365ANCNFSM4HDHMSDA
.

如果您尚未致力于 gRPC 并且专注于 Azure 应用服务,那么 Websockets 可能是一个不错的选择。

配置好 k8s 后,Azure Devops 就很简单了。 您告诉它构建 docker 容器并使用build:id标签部署到 azure 存储库,然后运行 ​​kubectl 告诉它使用构建 id 的正确标签更新部署的容器,它将透明地推出新版本。 我们唯一要做的就是创建一个在执行 EF 迁移之前执行迁移的工具,这样您就不会得到多个 k8s 副本同时调用迁移脚本。

魔术伙伴非常感谢,我也很喜欢领域驱动设计,所以我
我想我现在可以将 AKS 添加到我的军械库,但我希望我的客户搬到
无服务器,我不明白为什么大多数人似乎不想继续前进
容器?

2020 年 5 月 12 日星期二晚上 11:05 James Hancock [email protected]
写道:

如果您还没有致力于 gRPC,Websockets 可能是一个很好的后备方案
并专注于 Azure 应用服务。

配置好 k8s 后,Azure Devops 就很简单了。 你告诉它建造
docker 容器并使用build:id部署到 azure 存储库
标记然后释放你运行 kubectl 告诉它更新部署的
具有构建 ID 正确标签的容器,它只会
透明地推出新版本。 我们唯一做的就是创建一个工具
在执行此操作之前执行 EF 迁移,这样您就不会最终得到
多个 k8s 副本同时调用迁移脚本。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-627329964
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7MW7NJUS475HICIJTTRRFCQBANCNFSM4HDHMSDA
.

@acrigney容器被广泛认为是一种“无服务器”技术。 这绝对是有争议的,但没有严格的定义

@acrigney无服务器尤其是 Azure 功能不可取的原因有很多:

  1. Azure Functions 是一堆易碎的热气腾腾的废话,总是落后于 .net 核心的安全补丁。
  2. Azure 函数在很大程度上是一个黑匣子,在许多情况下很难调试。
  3. 一旦你开始充分利用它,当你有恒定负载时,它比其他选项更昂贵。
  4. 在 Azure 函数中,没有什么是你不能做的
  5. K8s 提供了一个通用的已知环境,它在本地开发机器上的功能与在您想要创建的任何云中的功能相同。 当您创建资源时,它会起作用。 无论是 Azure 还是 AWS 支持它都无关紧要,它与 Azure Functions 的工作方式相同且始终如一,我们在 Azure 中获得的结果与在本地定期获得的结果不同。
  6. K8s,在负载系统上的成本低于 Azure Functions。
  7. K8s 的部署优于功能。
  8. 一旦你开始使用 VS 代码远程处理到 docker,你就不想回去了。 与生产环境相同的配置,以实现 100% 的一致性。 (我们在 docker 中使用 k8s 来开发 WSL2 docker 并在 linux 中旋转 k8s,这与 Windows 10 2004 完美配合,但 k8s 中的完整开发即将推出)
  9. k8s 为您提供虚拟机的所有自主权,而无需管理虚拟机、负载平衡等。它可以正常工作。
  10. 如果您使用平台定位和 IL 正确构建您的 docker 映像,那么在 k8s 中链接您的微服务与在 Azure 函数中一样小,因此不存在扩展问题。

这只是一个简短的清单。 Azure 函数在理论上很棒,然后你开始用它敲打你的头,你发现它并不值得。

直到他们开始将内核从 Windows 2004(2020 年春季)推出到 Azure。

IIS 的必要工作仍在进行中,并且在 2004 版本中不可用。

@Tratcher哇。 哎哟。 因此,一年多的时间过去了,.net 核心支持 gRPC,而 Azure 还没有一种可行的方式让世界上绝大多数开发人员使用它。

MS 需要创建真正的基于 docker 的应用服务,该服务使用 nginx 或 ha 代理,而不是用于 RP 的 IIS。 这是疯了。

真的,伙计,我认为这是在拉伸它,当然 AKS 可以扩展,但
特别是与运行多个所需的消息传递耦合
大型项目的容器我几乎不会考虑使用容器
与无服务器技术的理想保持一致。 我可以轻松即插即用任何
具有应用程序服务器和功能的后端技术微服务,但我会拥有吗
容器的这种敏捷性?

2020 年 5 月 12 日星期二晚上 11:31 onionhammer [email protected]
写道:

@acrigney https://github.com/acrigney容器非常广泛
被认为是“无服务器”技术


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-627347120
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7PPWZ7MPIETCXPEFYDRRFFUNANCNFSM4HDHMSDA
.

@acrigney绝对会。 而且您也不会有 Azure Functions 的依赖地狱。 (如果需要,您可以轻松地在容器甚至 k8s 中使用 Azure Function 主机)

@acrigney您是否尝试将 gRPC 暴露给在应用服务中运行的其他微服务? 你的拓扑是什么样的?

谢谢队友,但我认为你不会有任何依赖地狱或紧
与功能耦合。 我使用 DDD 应用程序制作有状态的微服务
使用 Azure 应用服务提供服务,我使用
Azure 函数中的 DDD 应用程序服务。 DDD 应用服务公开
DTO 和使用域对象和其他应用服务可以观察到
这些域对象触发的事件。 我只是不需要容器和一次
你构建了一个容器,它会有很多重复的代码
在其他容器中将需要。

2020 年 5 月 13 日,星期三,上​​午 12:09 James Hancock [email protected]
写道:

@acrigney https://github.com/acrigney你绝对会的。 和你
也不会有 Azure Functions 的依赖地狱。 (你可以
如果需要,可以在容器甚至 k8s 中轻松使用 Azure Function 主机)


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-627369635
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7PQLO2K4RVWBQRGQS3RRFKCZANCNFSM4HDHMSDA
.

it-does-not-run-on-IIS-warning应使用<marquee> -tag 放置在页面顶部: https ://docs.microsoft.com/en-us/aspnet/core

如果您一直在进行原型设计、创建原型文件、使用 JWT 配置服务器、客户端、身份验证,并且刚刚将整个想法推销给客户端,那么这真的是inject profanity here since-sliced-bread 发现我们不能在生产中使用它,因为我们在 IIS 上运行。 :(

直到他们开始将内核从 Windows 2004(2020 年春季)推出到 Azure。

IIS 的必要工作仍在进行中,并且在 2004 版本中不可用。

有 eta / 路线图吗?

it-does-not-run-on-IIS-warning应使用<marquee> -tag 放置在页面顶部: https ://docs.microsoft.com/en-us/aspnet/core

你是对的,我已经提交了https://github.com/dotnet/AspNetCore.Docs/issues/18336来澄清。

有 eta / 路线图吗?

不,有太多的活动部件无法给出可靠的估计。

有没有人有一些关于如何使用 grpc 和 kestrel 配置 nginx 的文档?

快速提问:对 IIS 和 Azure 应用服务的支持是耦合在一起还是可以/是否可以单独提供?

谢谢你们!

它们有些耦合——Azure App Service 的入口和 Windows 托管依赖于 IIS,因此获得对 IIS 的支持是先决条件。

然后应用服务需要基于具有这些修复的构建进行部署,因此应用服务将在 IIS 支持之后出现。

快速提问:我在 IIS (10.0) 上部署了 gRPC 服务器,现在出现错误,“Status(StatusCode=Cancelled, Detail=\"No grpc-status found on response.\")”。 我使用 WebApi 项目作为 gRPC 客户端。 任何人都可以帮助我吗?

快速提问:我在 IIS (10.0) 上部署了 gRPC 服务器,现在出现错误“Status(StatusCode=Cancelled, Detail="No grpc-status found on response.")”。 我使用 WebApi 项目作为 gRPC 客户端。 任何人都可以帮助我吗?

做不到,IIS 不支持 gRCP。

@lumogox @Dhananjay48注意:GRPC-web 受 IIS 支持,大部分情况下您只会丢失客户端流。 所以这是一种解决方法,虽然不是很好。

否则,根据我所看到的,我们至少要等到 12 月才能在 IIS 中修复此问题,因此请离开并使用 nginx 之类的其他东西作为反向代理。

如果您只想在 Azure 应用服务上部署 GRPC,现在可以使用 Linux 容器来完成

@EdiWang Linux 的应用服务目前不支持此功能。 我们目前正在与应用服务合作以启用此功能,但我没有任何 ETA 可分享

这是因为 webapp 前面还有 HTTP.sys,即使它是在 Linux 上运行的 docker 容器?

据我了解,所有应用服务都由 iis 反向代理。 因此,在解决此问题之前,它们将无法工作。

只有具有公共 IP 或由 ha 或 nginx 等 (Linux) 进行 rped 的东西才能工作。 例如,带有 nginx 或 ha 的 Kubernetes 可以正常工作,但作为入口的应用程序网关则不能。

据我了解,所有应用服务都由 iis 反向代理。 因此,在解决此问题之前,它们将无法工作。

只有具有公共 IP 或由 ha 或 nginx 等 (Linux) 进行 rped 的东西才能工作。 例如,带有 nginx 或 ha 的 Kubernetes 可以正常工作,但作为入口的应用程序网关则不能。

这也是我的理解。 实际上,我在这里结束了,因为我阅读了是否所有应用程序服务都由 IIS 提供。 因为在此处的文档中:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#when-to-use-kestrel-with-a-reverse-代理 - 如果您要将红隼暴露在互联网上,它建议我们在红隼前面安装一个反向代理:) 我知道在 Windows 上运行时有一个 IIS,但我找不到任何可以验证 HTTP.sys 或 IIS在应用服务中运行 docker 时也是前端。 这个线程是我来过的最接近的。 有趣的是,我订阅了这个帖子,因为我对 gPRC 也很感兴趣 :)

我可以确认 iis 还支持基于容器的应用服务,包括 Linux 服务。

您唯一的选择是您自己完成 rp 或 aks 的 VMS。

@davidfowl AppService 用户语音没有受到太多关注。

https://feedback.azure.com/forums/169385-web-apps/suggestions/40585333-grpc-support-in-azure-app-service
这可能是实施缓慢的原因吗? 如您所见,我认为 gRPC 支持很重要。

是的,特别是因为我也无法让 websockets 工作,我是
担心容器的成本,因为我必须运行很多。

2020 年 6 月 12 日星期五晚上 9:58 Takekazu Omi [email protected]
写道:

@davidfowl AppService 用户语音没有受到太多关注。

https://feedback.azure.com/forums/169385-web-apps/suggestions/40585333-grpc-support-in-azure-app-service
这可能是实施缓慢的原因吗? 如你所见
问题,我认为 gRPC 支持很重要。


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-643232429
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7L4452ZISXPNAXWYLRWIKADANCNFSM4HDHMSDA
.

在那里添加请求仍然非常重要。

@davidfowl说起来容易做起来难。 尝试使用具有新优势的 Microsoft 帐户登录该站点。 弹出一个新窗口,什么也不做。 尝试使用我的电子邮件登录,我忘记了密码,密码电子邮件进入垃圾邮件以获取@outlook.com 电子邮件地址。 更改它,登录,并且没有密码管理器提示存储密码等。

只是哇糟糕。 我猜 Azure 团队因此没有得到很好的反馈。 希望你能把这个转发给合适的人来解决这个烂摊子。

也许它将帮助某人将grpc托管到iis。
这是使用 gRPC-Web 代码优先方法工作 grpcweb Blazor WebAssembly 的示例,该方法通过远程发布托管到 iis,就像一个魅力。 我认为它也可以以其他方式工作。 我还没有进行任何性能测试,所以我无法对此发表评论,但我认为至少它适用于任何中等规模的解决方案。
这是github的链接
它还使用了 protobuf-net.Grpc.AspNetCore,这不是无聊的 protobuff 声明。 当您可以直接进入实现或添加额外的方法来请求/响应时,这真是太好了。

大家好,我需要在 Grpc 消息中定义一个字符串数组类型 dataType。 不知道该怎么做。 现在我正在做
重复字符串 Name = 1,
这里我需要名称字段作为字符串数组类型。 但它显示错误,在其中绑定数据时字段是只读类型。

@Dhananjay48这不是 StackOverflow。 请在那里问你的问题。
让我们将此问题保留为与应用服务中的 gRPC 相关的内容。

据我了解,所有应用服务都由 iis 反向代理。 因此,在解决此问题之前,它们将无法工作。

只有具有公共 IP 或由 ha 或 nginx 等 (Linux) 进行 rped 的东西才能工作。 例如,带有 nginx 或 ha 的 Kubernetes 可以正常工作,但作为入口的应用程序网关则不能。

使用 nginx 可以“在反向代理配置中使用 Kestrel”作为解决方案吗? https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#when-to-use-kestrel-with-a-reverse-proxy '

我在文档中向@JamesNK提出了建议,包括一个示例托管解决方案:
https://github.com/dotnet/AspNetCore.Docs/issues/18953

https://devblogs.microsoft.com/aspnet/grpc-web-for-net-now-available/?utm_source=vs_developer_news&utm_medium=referral
最近宣布,可以部署到 Azure。

2020 年 6 月 25 日星期四下午 1:48,OzBob通知@github.com 写道:

据我了解,所有应用服务都由 iis 反向代理。
因此,在解决此问题之前,它们将无法工作。

只有具有公共 IP 或由 ha 或 nginx 等 (Linux) 进行 rped 的东西才会
工作。 以 nginx 或 ha 为例,Kubernetes 工作正常,但应用程序
网关作为入口不会。

可以用 nginx 将“Kestrel 用于反向代理配置”吗?
解决方案?
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#when -to-use-kestrel-with-a-reverse-proxy
'

我将建议提交给@JamesNK https://github.com/JamesNK
docs,包括一个示例托管解决方案:
dotnet/AspNetCore.Docs#18953
https://github.com/dotnet/AspNetCore.Docs/issues/18953


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-649198280
或退订
https://github.com/notifications/unsubscribe-auth/ABCSC7KBUALMCXDGUS2NV7LRYLCKNANCNFSM4HDHMSDA
.

@acrigney并在 Ch9 上也提到过: https ://youtu.be/T4RD3W2MgHQ?list=TLPQMjUwNjIwMjB6we-UTBA_VA&t= 288 @shirhatti (https://twitter.com/sshirhatti)

我只想指出,我们一直在与 Windows 团队合作,开始启用这些场景。 这是 Windows 团队的一篇博客文章https://github.com/dotnet/aspnetcore/pull/24120有一些后续工作来公开 ASP.NET Core 中的东西。

在所有这些土地之前还需要一段时间,但很高兴能够报告我们至少正在取得进展。

感谢您的跟进,非常有帮助和赞赏!

2020 年 7 月 22 日星期三上午 11:17 Kevin Pilch [email protected]
写道:

我只是想指出我们一直在与 Windows 团队合作
开始启用这些场景。 这是一篇博文
来自 Windows 团队的https://aka.ms/grpcblogpost和 #24120
https://github.com/dotnet/aspnetcore/pull/24120有一些
在 ASP.NET Core 中公开事物的后续工作。

在所有这些土地之前还需要一段时间,但很高兴能够
报告我们至少正在取得进展。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/dotnet/aspnetcore/issues/9020#issuecomment-662547810
或退订
https://github.com/notifications/unsubscribe-auth/AAUKMASPCV3UE47OJZ6TIMDR44GKTANCNFSM4HDHMSDA
.

我只想指出,我们一直在与 Windows 团队合作,开始启用这些场景。 这是来自 Windows 团队的一篇博客文章,其中 #24120 有一些后续工作来公开 ASP.NET Core 中的内容。

在所有这些土地之前还需要一段时间,但很高兴能够报告我们至少正在取得进展。

请注意,这已在 5.0 预览版中集成到 AspNetCore 的 HttpSys 服务器中。 请试一试。 如果我们现在可以在这一层发现任何问题,那么当我们在此之上添加 IIS 层时,我们应该会少一些麻烦。

这是否意味着如果我使用面向 .NET 5 预览版的 ASP.NET Core,我可以在 IIS 上执行完整的 gRPC?

还没有。 这里有很多不同的部分:

  1. Windows 中的 Http.sys 模块
  2. HttpSysServer 中对此的 ASP.NET Core 支持
  3. IIS 在 Windows 中对此的支持
  4. IIS 上对此的 ASP.NET Core 支持
  5. Azure 应用服务使用的反向代理对此提供支持
  6. Azure 应用服务使用 1 和 3 部署 Windows 版本。
  7. Azure 应用服务从 5 部署反向代理的构建
  8. Azure 应用服务使用 2 和 4 部署 ASP.NET Core 的构建。

@Tratcher的意思是 1 和 2 在 .NET 5 的预览版中可用。我们现在正在研究 3 和 4,但尝试 1 和 2 将帮助我们反馈这是否可行,因为 Http. sys 支持是 IIS 支持的基础。

应该说,1 在 Windows 的预览版中可用,2 在 .NET 5 的预览版中可用。

Windows Insider 预览版可通过更新的 http.sys 获得
https://techcommunity.microsoft.com/t5/networking-blog/windows-server-insiders-getting-grpc-support-in-http-sys/ba-p/1534273

如果这将作为 Windows Server 2016/2019 的 Windows 更新提供,有什么想法吗?

IIS 支持现已在此处公布的最新 Windows Insider 版本中提供。

我们正在调查是否可以将这些更改反向移植到服务构建中,但这仍然悬而未决。 截至目前,唯一的记录计划是它们将在未来的版本中出现。

此页面是否有帮助?
0 / 5 - 0 等级