.net 5 編寫的grpc服務,在windows2016 IIS10上沒有架設成功,試過了http https均不可行,可能是沒有SSL證書的原因,自簽名證書也試過了,都無法連接,具體錯誤信息如下
http
Grpc.Core.RpcException: Status(StatusCode="Internal", Detail="Error starting gRPC call. HttpRequestException: An error occurred while sending the request. IOException: The request was aborted. Http2ConnectionException: The HTTP/2 server sent invalid data on the connection. HTTP/2 error code 'PROTOCOL_ERROR' (0x1).", DebugException="System.Net.Http.HttpRequestException: An error occurred while sending the request.
https
Grpc.Core.RpcException: Status(StatusCode="Cancelled", Detail="No grpc-status found on response.")
官方給出的文檔似乎也不能解決
https://docs.microsoft.com/zh-cn/iis/get-started/whats-new-in-iis-10/http2-on-iis
至少我也沒有成功
后來想到將grpc服務作成windows服務,搞定
首先添加 Microsoft.AspNetCore.Hosting.WindowsServices 的包引用
在 Program.cs 的 CreateHostBuilder 中:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
然后發布項目
以管理員身份打開命令提示符
接下來,我們可以使用標准Windows服務命令將exe作為服務安裝。因此,將命令提示符移動到輸出文件夾(可能沿着myproject\bin\Release\netcoreapp3.1\publish)。並運行類似的內容以作為服務安裝:
sc create ASPNETCoreWindowsService binPath=ASPNETCoreWindowsService.exe
當然我們也可以停止和刪除該服務
sc.exe stop ASPNETCoreWindowsService
sc.exe delete ASPNETCoreWindowsService
然后在windows服務中,找到服務名為 ASPNETCoreWindowsService 的服務,啟動,並設為自動啟動
訪問http://ip:5000,即可
具體可參照
https://cloud.tencent.com/developer/article/1571026
此處不再重復粘貼
服務的端口號,可在appsettings.json的 "Urls"節點中配置,例如我的配置為

少了一層IIS反向代理,按理說效率應該更高吧
