主頁 > .NET開發 > ASP.NET Core updates in .NET 6 Preview 3

ASP.NET Core updates in .NET 6 Preview 3

2021-04-11 06:01:40 .NET開發

ASP.NET Core updates in .NET 6 Preview 3

.NET 6 Preview 3現在可用了,其中包括對ASP.NET Core的許多重大改進,

這是此預覽版本中的新增功能:

  • 更小的SignalR,Blazor Server和MessagePack scripts
  • 啟用 Redis 分析會話
  • HTTP/3 endpoint TLS配置
  • 初版的 .NET Hot Reload 支持
  • Razor編譯器不再產生單獨的Views程式集
  • IIS中的 Shadow-copy
  • SignalR C ++客戶端的 Vcpkg 移植
  • 減少了空閑TLS連接的記憶體占用
  • SlabMemoryPool 中移除 slabs
  • WPF和WindowsForm 中的 BlazorWebView 控制元件

開始吧

要在.NET 6 Preview 3中開始使用ASP.NET Core,請安裝.NET 6 SDK,

如果您使用的是Windows上的Visual Studio,建議安裝Visual Studio 2019 16.10的最新預覽版,如果您使用的是macOS,我們建議安裝Visual Studio 2019 for Mac 8.10的最新預覽版,

升級現有專案

要將現有的ASP.NET Core應用程式從.NET 6 Preview 2升級到.NET 6 Preview 3:

  • 將所有 Microsoft.AspNetCore.* 軟體包參考更新為,6.0.0-preview.3.*
  • 將所有 Microsoft.Extensions.* 軟體包參考更新為,6.0.0-preview.3.*

請參閱ASP.NET Core for .NET 6中的重大更改的完整串列,

較小的SignalR,Blazor Server和MessagePack腳本

多虧了Ben Adams的社區貢獻,SignalR,MessagePack和Blazor Server腳本現在大大縮小了,下載量更小,瀏覽器更少的JavaScript決議和編譯以及更快的啟動速度,

這項作業減少了下載大小,這是非常驚人的:

library 修改前 修改后 %?? .br
signalr.min.js 130 KB 39 KB 70% 10 KB
blazor.server.js 212 KB 116 KB 45% 28 KB

現在用于MessagePack的軟體包您還只需要使用 @microsoft/signalr-protocol-msgpack即可,無需引入msgpack5,這意味著你只需要一個額外的29 KB,而不是早先使用MessagePack 代替 JSON 的140 KB

縮小尺寸的方法如下:

  • 將TypeScript和依賴項更新到最新版本,
  • uglify-js切換到terser,這是webpack的默認設定,并支持更新的JavaScript語言功能(如class),
  • 將SignalR模塊標記為"sideEffects": false,這對于搖樹優化更有效,
  • 放棄"es6-promise/dist/es6-promise.auto.js"polyfill,
  • 將TypeScript更改為輸出es2019而不是輸出es5,并放棄了“ es2015.promise”和“ es2015.iterable” polyfill,
  • @msgpack/msgpack移至msgpack5,因為它需要較少的polyfill,并且對TypeScript和模塊更友好,

您可以在GitHub上的 Ben 的pull request找到有關這些更改的更多詳細資訊,

啟用Redis分析會話

我們接受了Gabriel Lucaci的社區貢獻,以在此預覽中啟用與Microsoft.Extensions.Caching.StackExchangeRedis的Redis分析會話,有關Redis分析的更多詳細資訊,請參見官方檔案,該API可以按以下方式使用:

services.AddStackExchangeRedisCache(options =>
{
    options.ProfilingSession = () => new ProfilingSession();
})

HTTP / 3端點TLS配置

.NET 6中對HTTP / 3的支持的作業開始加強,HTTP/ 3與現有的HTTP協議相比,具有許多優點,包括更快的連接建立和改進的低質量網路性能,

此預覽中的新增功能是使用可以在單個HTTP / 3埠上配置TLS證書UseHttps,這使Kestrel的HTTP / 3端點配置與HTTP / 1.1和HTTP / 2保持一致,

.ConfigureKestrel((context, options) =>
{
    options.EnableAltSvc = true;
    options.Listen(IPAddress.Any, 5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http3;
        listenOptions.UseHttps(httpsOptions =>
        {
            httpsOptions.ServerCertificate = LoadCertificate();
        });
    });
})

初版的.NET Hot Reload支持

現在,使用.NET的ASP.NET Core&Blazor專案可以使用.NET Hot Reload的早期支持dotnet watch,.NET Hot Reload會將代碼更改應用于正在運行的應用程式,而無需重新啟動它,也不會丟失應用程式狀態,

要嘗試對基于.NET 6的現有ASP.NET Core專案進行熱重裝,請將屬性添加到launchSettings.json中的啟動組態檔中,對于Blazor WebAssembly專案,請使用熱多載組態檔,"hotReloadProfile": "aspnetcore"``"blazorwasm"

使用運行專案dotnet watch,輸出應指示已啟用熱重裝:

watch : Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload. Press "Ctrl + R" to restart.

如果您想在任何時候強制應用程式重新生成并重新啟動,則可以通過Ctrl+R在控制臺上輸入來執行此操作,

您現在可以開始對代碼進行編輯,保存代碼更改時,適用的更改幾乎立即自動熱加載到正在運行的應用程式中,正在運行的應用程式中的所有應用程式狀態都將保留,

hot-reload

您也可以將更改熱加載到CSS檔案中,而無需重繪瀏覽器:

css-hot-reload

.NET Hot Reload不支持某些代碼更改,您可以在docs中找到受支持的代碼編輯串列,對于Blazor WebAssembly,當前僅支持方法主體替換,我們正在努力擴展.NET 6中受支持的編輯集,當dotnet watch檢測到無法使用熱多載應用的更改時,它會退回到重建和重新啟動應用程式的狀態,

這只是.NET 6中熱多載支持的開始,在即將發布的預覽中以及在Visual Studio中集成熱多載后,將很快提供對桌面和移動應用程式的熱多載支持,

Razor編譯器不再產生單獨的Views程式集

Razor編譯器以前利用兩步編譯程序生成了一個單獨的Views程式集,其中包含在應用程式中定義的生成的視圖和頁面(.cshtml),生成的型別是公共的,并且在AspNetCore名稱空間下,

現在,我們更新了Razor編譯器,以將視圖和頁面型別構建到主專案程式集中,現在,默認情況下會像在AspNetCoreGeneratedDocument命名空間中一樣生成internal sealed這些型別,此更改提高了構建性能,啟用了單個檔案部署,并使這些型別可以參與.NET Hot Reload,

有關此更改的更多詳細資訊,請參閱GitHub上的相關公告,

IIS中的卷影復制(Shadow-copy)

我們在IIS的ASP.NETCore模塊中添加了一項新功能,以增加對影子復制應用程式集的支持,當前,.NET在Windows上運行時會鎖定應用程式二進制檔案,因此在應用程式仍在運行時無法替換二進制檔案,盡管我們建議仍然使用應用程式脫機檔案,但我們認識到在某些情況下(例如FTP部署)不可能這樣做,

在這種情況下,可以通過自定義ASP.NET Core模塊處理程式設定來啟用卷影復制,在大多數情況下,ASP.NET Core應用程式沒有將web.config簽入您可以修改的源代碼控制中(它們通常由SDK生成),您可以添加此web.config示例以開始使用,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- To customize the asp.net core module uncomment and edit the following section. 
  For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->

  <system.webServer>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModulev2" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
      <handlerSettings>
        <handlerSetting name="experimentalEnableShadowCopy" value="https://www.cnblogs.com/weihanli/p/true" />
        <handlerSetting name="shadowCopyDirectory" value="https://www.cnblogs.com/weihanli/ShadowCopyDirectory/" />
        <!-- Only enable handler logging if you encounter issues-->
        <!--<handlerSetting name="debugFile" value="https://www.cnblogs.com/weihanli/p/logs/aspnetcore-debug.log" />-->
        <!--<handlerSetting name="debugLevel" value="https://www.cnblogs.com/weihanli/p/FILE,TRACE" />-->
      </handlerSettings>
    </aspNetCore>
  </system.webServer>
</configuration>

您需要新版本的ASP.NET Core模塊才能嘗試使用此功能,在自托管的IIS服務器上,這需要新版本的托管捆綁包,在Azure App Services上,將需要安裝新的ASP.NET Core運行時網站擴展

ASP.NET Core運行時網站擴展

SignalR C ++客戶端的Vcpkg移植

Vcpkg是用于C和C ++庫的跨平臺命令列軟體包管理器,我們最近在vcpkg中添加了一個SignalR C ++客戶端的移植,添加CMake native支持(也適用于MSBuild專案),

您可以使用以下代碼段將SignalR客戶端添加到CMake專案中(假設您已經包含了vcpkg工具鏈檔案):

find_package(microsoft-signalr CONFIG REQUIRED)
link_libraries(microsoft-signalr::microsoft-signalr)

此后,無需任何其他配置即可準備好在您的專案中使用 SignalR C ++客戶端并在其中使用它,有關使用SignalR C ++客戶端的C ++應用程式的完整示例,請查看此存盤庫,

減少了空閑TLS連接的記憶體占用

對于僅偶爾來回發送資料的長期運行的TLS連接,我們已大大減少了.NET 6中ASP.NET Core應用程式的記憶體占用,這將有助于提高WebSocket服務器等方案的可伸縮性,這主要是在System.IO.PipelinesSslStream和 Kestrel 的許多改進,讓我們看一下促成這種情況的一些改進:

減小System.IO.Pipelines.Pipe的大小

對于我們建立的每個連接,我們在Kestrel中分配兩個管道:一個從傳輸層到請求的應用程式,另一個從應用程式層到回應的傳輸,通過將System.IO.Pipelines.Pipe大小從368個位元組縮小到264個位元組(?28.2%),我們為每個連接節省了208個位元組(每個管道104個位元組),

池化 SocketSender

SocketSender物件(該子類SocketAsyncEventArgs)在運行時約為350個位元組,我們可以合并它們SocketSender,而不是為每個連接分配新的物件,因為發送通常非常快,并且我們可以減少每個連接的開銷,現在,我們只為每個連接支付350個位元組IOQueue(每個佇列一個,以避免爭用),而不是為每個連接支付350個位元組,在具有5000個空閑連接的WebSocket服務器中,我們從分配?1.75 MB(350位元組* 5000)到現在只為SocketSender物件分配?2.8kb(350位元組* 8),

零位元組讀取 SslStream

無緩沖讀取是一種我們已經在ASP.NET Core中采用的技術,如果套接字上沒有可用資料,則可以避免從記憶體池中租用記憶體,在進行此更改之前,具有5,000個空閑連接的WebSocket服務器需要200兆位元組(不帶TLS)的資料,而使用TLS則需要800兆位元組,其中一些分配(每個連接4k)來自Kestrel,必須在等待對SslStream的讀取完成時保留ArrayPool緩沖區,假設這些連接處于空閑狀態,則讀取操作均不會完成,并將其緩沖區回傳給ArrayPool,從而迫使ArrayPool分配更多的記憶體,剩下的分配SslStream本身就是:用于TLS握手的4k緩沖區和用于正常讀取的32k緩沖區,在Preview3中,當用戶在SslStream上執行零位元組讀取并且沒有可用資料時,SslStream將在內部對基礎包裝的流執行零位元組讀取,在最佳情況下(空閑連接),這些更改導致每個連接節省40 Kb,同時仍然允許在資料可用時通知使用者(Kestrel),而無需保留任何未使用的緩沖區,

零位元組讀取 PipeReader

一旦SslStream支持了無緩沖讀取,我們便添加了對零位元組讀取的選項StreamPipeReader,該內部型別將a適配Stream為a PipeReader,在Kestrel中,我們使用aStreamPipeReader將基礎適應SslStream為a PipeReader,并且有必要在上公開這些零位元組讀取語意PipeReader

現在,您可以創建一個PipeReader支持零位元組讀取在任何底層Stream支持零位元組讀取語意(例如,, SslStreamNetworkStream使用下面的API等):

var reader = PipeReader.Create(stream, new StreamPipeReaderOptions(useZeroByteReads: true));

SlabMemoryPool 中移除 slabs

為了減少堆的碎片,Kestrel采用了一項技術,在該技術中分配了128 KB的記憶體作為其記憶體池的一部分,然后將這些 slabs 進一步劃分為4 KB的塊,供Kestrel在內部使用,平板必須大于85 KB,以強制在大物件堆上進行分配,以嘗試防止GC重新定位此陣列,但是,隨著新一代GC(固定物件堆(POH))的引入,在 slabs 上分配塊不再有意義,在preview3中,我們現在直接在POH上分配塊,從而降低了管理我們自己的記憶體池所涉及的復雜性,此更改將使將來的改進變得更容易,例如使Kestrel所使用的記憶體池更容易收縮,

WPF和WindowsForms的BlazorWebView 控制元件

對于.NET 6,我們添加了對使用.NET MAUI和Blazor構建跨平臺混合桌面應用程式的支持,混合應用程式是利用Web技術實作其功能的本機應用程式,例如,混合應用程式可能使用嵌入式Web視圖控制元件來呈現Web UI,這意味著您可以使用HTML和CSS等網路技術撰寫應用程式UI,同時還可以利用本機設備功能,我們將在即將發布的.NET 6預覽版中引入對使用.NET MAUI和Blazor構建混合應用程式的支持,

在此版本中,我們引入了BlazorWebView用于WPF和Windows Forms應用程式的控制元件,這些控制元件允許將Blazor功能嵌入到基于.NET 6的現有Windows桌面應用程式中,使用Blazor和混合方法,您可以開始將UI投資與WPF和Windows Forms脫鉤,這是一種現代化現有桌面應用程式的好方法,可以將其引入.NET MAUI或在網路上使用,您可以使用Blazor對現有的Windows Forms和WPF應用程式進行現代化改造,同時利用現有的.NET投資,

要使用新BlazorWebView控制元件,首先需要確保已安裝WebView2,

要將Blazor功能添加到現有的Windows Forms應用程式中,請執行以下操作:

  • 將Windows Forms應用更新為目標.NET 6,
  • 將應用程式專案檔案中使用的SDK更新為Microsoft.NET.Sdk.Razor
  • 添加對Microsoft.AspNetCore.Components.WebView.WindowsForms的包參考,
  • 將以下wwwroot / index.html檔案添加到專案中,用實際的專案名稱替換:{PROJECT NAME}
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
    <title>Blazor app</title>
    <base href="https://www.cnblogs.com/" />
    <link href="https://www.cnblogs.com/weihanli/p/{PROJECT NAME}.styles.css" rel="stylesheet" />
    <link href="https://www.cnblogs.com/weihanli/p/app.css" rel="stylesheet" />
</head>

<body>
    <div id="app"></div>

    <div id="blazor-error-ui">
        An unhandled error has occurred.
        <a href="" >Reload</a>
        <a >??</a>
    </div>

    <script src="https://www.cnblogs.com/weihanli/p/_framework/blazor.webview.js"></script>
</body>
</html>
  • 將以下具有一些基本樣式的app.css檔案添加到wwwroot檔案夾:
html, body {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid red;
}

.validation-message {
    color: red;
}

#blazor-error-ui {
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }
  • 對于wwwroot檔案夾中的所有檔案,將“復制到輸出目錄”屬性設定為“如果較新則復制”
  • 將根Blazor組件Counter.razor添加到專案中:
@using Microsoft.AspNetCore.Components.Web

<h1>Counter</h1>

<p>The current count is: @currentCount</p>
<button @onclick="IncrementCount">Count</button>

@code {
    int currentCount = 0;

    void IncrementCount()
    {
        currentCount++;
    }
}
  • BlazorWebView控制元件添加到所需的表單以呈現根Blazor組件:
var serviceCollection = new ServiceCollection();
serviceCollection.AddBlazorWebView();
var blazor = new BlazorWebView()
{
    Dock = DockStyle.Fill,
    HostPage = "wwwroot/index.html",
    Services = serviceCollection.BuildServiceProvider(),
};
blazor.RootComponents.Add<Counter>("#app");
Controls.Add(blazor);
  • 運行該應用程式以查看您BlazorWebView的操作:

Blazor Windows表單

要將Blazor功能添加到現有WPF應用程式中,請按照Windows表單應用程式上面列出的相同步驟進行操作,但以下步驟除外:

  • 替換Microsoft.AspNetCore.Components.WebView.Wpf的程式包參考
  • BlazorWebView在XAML中添加控制元件:
<Window x:
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:blazor="clr-namespace:Microsoft.AspNetCore.Components.WebView.Wpf;assembly=Microsoft.AspNetCore.Components.WebView.Wpf"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <blazor:BlazorWebView HostPage="wwwroot/index.html" Services="{StaticResource services}">
            <blazor:BlazorWebView.RootComponents>
                <blazor:RootComponent Selector="#app" ComponentType="{x:Type local:Counter}" />
            </blazor:BlazorWebView.RootComponents>
        </blazor:BlazorWebView>
    </Grid>
</Window>
  • 將服務提供者設定為靜態資源:
var serviceCollection = new ServiceCollection();
serviceCollection.AddBlazorWebView();
Resources.Add("services", serviceCollection.BuildServiceProvider());
  • 要解決WPF運行時內部版本找不到Razor組件型別的問題,請在Counter.razor.cs中為該組件添加一個空的部分類:
public partial class Counter { }
  • 構建并運行基于Blazor的WPF應用程式:

Blazor WPF

給予反饋

我們希望您喜歡.NET 6中的ASP.NET Core預覽版,我們希望聽到您使用此版本的體驗,可以通過在GitHub上提交問題,讓我們知道您的想法,

感謝您試用ASP.NET Core!

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/274640.html

標籤:.NET Core

上一篇:在ASP.NET Core中使用ViewComponent

下一篇:使用 EPPlus 封裝的 excel 表格匯入功能 (.net core c#)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more