.net5 grpc服務在windows上的架設方法


.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反向代理,按理說效率應該更高吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM