主頁 > .NET開發 > .NET Core前后端分離快速開發框架(Core.3.1+AntdVue)

.NET Core前后端分離快速開發框架(Core.3.1+AntdVue)

2020-09-21 02:27:31 .NET開發

.NET Core前后端分離快速開發框架(Core.3.1+AntdVue)
  • 引言
  • 簡介
  • 環境搭建
    • 開發環境要求:
    • 基礎資料庫構建:
    • 資料庫設計規范
    • 運行
  • 使用教程
    • 系統配置
    • 快速開發
    • 管理員登錄
    • 系統用戶管理
    • 系統角色管理
    • 權限管理
    • 介面秘鑰管理
    • 系統日志
    • 操作日志
    • 事務使用
    • 讀寫分離分庫分表
  • 常見疑問
    • 如何進行聯表查詢
    • 如何切換資料庫型別
    • 如何使用多個資料庫
  • 結語

引言

時間真快,轉眼今年又要過去了,回想今年,依次開源發布了Colder.Fx.Net.AdminLTE(254Star)Colder.Fx.Core.AdminLTE(335Star)DotNettySocket(82Star)IdHelper(47Star),這些框架及組件都是本著以實際出發,實事求是的態度,力求提高開發效率(我自己都是第一個使用者),目前來看反響不錯,但是隨著前端和后端技術的不斷變革,尤其是前端,目前大環境已經是前后端完全分離為主的開發模式,在這樣的大環境和必然趨勢之下,傳統的MVC就顯得有些落伍了,在這樣的背景下,一款前后端分離的.NET開發框架就顯得尤為必要,由此便定了框架的升級目標:前后端分離

首先后端技術的選擇,從目前的資料來看,.NET Core的發展遠遠快于.NET Framework,最簡單的分析就是Colder.Fx.Core.AdminLTE發布比Colder.Fx.Net.AdminLTE晚,但是星星卻后來居上而且比前者多30%,并且這個差距在不斷擴大,由點及面的分析可以看出我們廣大.NET開發人員學習的熱情和積極向上的態度,并不是某些人所認為的那么不堪(走自己的路,讓別人說去吧),大環境上微軟積極擁抱開源,大力發展.NET Core, 可以說前途一片光明,因此后端決定采用 .NET Core3.1 ,不再浪費精力去支持.NET Framework,

然后是前端技術選擇,首選是三大js框架選擇,也是從實際出發,Vue相對其它而言更加容易上手,并且功能也毫不遜色,深得各種大小公司喜歡,如果偏要說缺點的話,那就是對TS支持不行,但是即將發布Vue3.0肯定會改變這一缺陷,選擇了Vue之后,然后就是UI框架的選擇了,這里的選擇更多了,我選擇了Ant Design Vue,理由便是簡潔方便,十分符合我的設計理念,

技術選型完畢之后便進入研發,由于鄙人前端比較菜,因此需要從頭學Vue2.x全家桶,從開始到現在差不多經歷3個月,在預期之內,其實學習并使用前端的Vue2.x全家桶并不難,還是比較容易上手的,所以在此給沒有前后端分離開發經驗的老哥打一記預防針,不要退縮,要知難而上,學習永無止境,

某些老哥可能比較直接粗暴,嫌我BBB嘮叨,下面直接上地址
代碼(GitHub):https://github.com/Coldairarrow/Colder.Admin.AntdVue
檔案(GitHub):https://github.com/Coldairarrow/Colder.Admin.AntdVue/wiki
代碼(碼云鏡像):https://gitee.com/Coldairarrow/Colder.Admin.AntdVue
檔案(碼云鏡像):https://gitee.com/Coldairarrow/Colder.Admin.AntdVue/wikis
在線預覽地址:http://coldairarrow.gitee.io/coler.antdvue.preview
由于服務器是阿里云的86服務器,帶寬1M小水管,因此將前端部署到碼云上了,在此多謝碼云,后端部署在阿里云86服務器CentOS7上,整個技術堆疊使用.NET Core + PostggreSQL+ Ant Design Vue + CentOS7+Nginx+Dokcer+jenkins,囊括了從快速開發到自動化部署一條龍,開源免費并具有高性能、高移植性、高拓展性(小公司創業選型+個人接單利器

簡介

本框架為.NET Core3.1+Ant Design Vue版

本框架旨在極大的提高開發效率

使用技術堆疊:
后端:采用.NET Core平臺,ASP.NET Core3.1,C#語言(使用反射等高級技術),Entity FrameworkCore(資料庫ORM框架),
使用資料倉儲模式,抽象化資料庫操作(CRUD等)、支持事務處理以及分布式事務處理(跨庫)
支持資料庫讀寫分離、分庫分表及事務(僅支持單表操作,不支持多表) 全面采用Autofac作為IOC容器,面向介面編程,全面解耦
集成多種工具類別庫以及操作拓展
資料庫:支持SqlServer,PostgreSQL,MySQL,Oracle(框架使用簡單工廠,工廠方法,抽象工廠,可輕松更換資料庫),Redis作為分布式快取
前端:Vue2.x全家桶+Ant Design Vue,其中集成常用組件,力求方便專案開發,

具體技術實施:
專案采用前后端完全分離模式,并采用嚴格分層模式,極大的增加聚合度,降低耦合度,
提高代碼的健壯性,可維護性,
前后端通過JWT進行身份驗證,通過資料介面操作資料,統一使用JSON作為資料格式,并使用默認介面簽名演算法保證介面的安全性,

功能架構部分詳解:
快速開發:此功能為框架的核心,通過選擇資料庫中的表,就能自動生成對應的物體層、業務邏輯層、控制器、前端頁面Vue檔案,無需撰寫代碼即可生成基本的CRUD操作,
介面密鑰管理:管理介面的密鑰,若開啟介面簽名的規則,則前端需要通過給介面簽名才能夠正常訪問后臺介面,
權限管理:使用基本的RBAC權限控制,支持操作權限、介面權限以及資料權限

框架主要功能及特色如下

功能 詳細描述
用戶登錄 用戶登錄、密碼修改
系統用戶管理 系統用戶管理
角1色管理 角色管理
部門管理 部門管理、天然多級
權限管理 使用RBAC權限體系,基于角色的權限管理,支持選單權限、操作權限(按鈕權限)、介面權限、資料權限
系統日志 支持多彩控制臺、檔案、資料庫和ElasticSearch記錄日志,框架全域例外自動捕捉,多級別記錄
快速開發 通過資料庫直接生成物體層、業務邏輯層、控制器層以及前端頁面Vue代碼,無需編碼即可實作CURD
資料庫操作封裝 使用基于EF的倉儲模式、封裝常用的CURD,支持單庫事物和分布式事物
多資料庫支持 使用基于EF的倉儲模式,支持各大主流關系型資料庫(SQLServer、MySQL、PostgreSQL和Oracle)
超強移植性 使用抽象工廠封裝資料庫操作層,切換資料庫0代碼修改
支持軟洗掉 一鍵切換洗掉模式,支持物理洗掉和軟洗掉,對業務操作透明
快取支持 支持系統自帶快取和Redis快取、封裝操作介面、簡單易用
前后端完全分離 前端使用Vue2.x全家桶+Ant Design Vue,界面簡潔美觀,組件化開發
集成JWT驗證 框架使用JWT作為身份驗證,擺脫Cookie苦海,分布式拓展毫無壓力
集成對外介面簽名演算法 框架對外介面可以開啟超強嚴格簽名校驗(防抵賴、防偽造、防重復呼叫),保障系統安全性
頁面回應式 前端為單頁應用,無iframe,各大主流瀏覽器支持友好
拓展 其它各種幫助類別庫及插件

其相關版本請看下表:

.NET版本 前端UI 地址
Core3.1 Ant Design Vue https://github.com/Coldairarrow/Colder.Admin.AntdVue
Core2.2 AdminLTE https://github.com/Coldairarrow/Colder.Fx.Core.AdminLTE
.NET4.72 AdminLTE https://github.com/Coldairarrow/Colder.Fx.Net.AdminLTE
.NET4.52 Easyui https://github.com/Coldairarrow/Coldairarrow.Fx.Net.Easyui.GitHub
Core2.1 Easyui https://github.com/Coldairarrow/Coldairarrow.Fx.Core.Easyui.GitHub
.NET4.0 Easyui https://github.com/Coldairarrow/Coldairarrow.Fx.Net40.Easyui.GitHub

后臺效果展示如下:
MG22Bd.png

環境搭建

開發環境要求:

作業系統:Windows 10
后端開發工具:Visual Studio 2019+
前端開發工具:Visual Studio Code,安裝nodejs,yarn
SDK:安裝.NET Core SKD 3.0 及以上
資料庫:SQLServer2008 R2及以上

基礎資料庫構建:

  • 資料庫創建
    目錄"/docs/初始化檔案"中有所需的資料庫資料
    MGo70U.png
    先手動創建資料庫,然后執行對應的SQL腳本即可

  • 連接字串配置
    打開src目錄下Colder.Admin.AntdVue的解決方案,如下圖

MGTuB8.png

如下圖所示依次展開05.Coldairarrow.Api/appsettings.json,配置資料庫連接字串,name不用修改,connectionString改為上述創建的資料庫(若不清楚資料庫連接字串請自行百度搜索教程)
JKgHRf.png

資料庫設計規范

由于本框架支持自動生成代碼的核心功能,此功能是根據資料庫的表結構來生成代碼的
因此規定每張表都有一個主鍵,列名為Id,型別為字串,實際添加資料時默認使用SnowflakeId(雪花Id,Twitter設計的分布式趨勢自增Id,若不清楚請自行百度相關資料),表中的每個列都需要有描述資訊(建議這樣操作,若不按照這個標準則需要一些額外的改動才能夠成功運行),每張表都需要Id、CreateTime、CreatorId這幾個必帶欄位

MG7p2n.png

運行

后端:打開解決方案=>還原nuget包=>配置資料庫=>運行(05.Coldairarrow.Api設為啟動專案)
后臺成功運行后會自動打開swagger
MGHcTO.png
前端: 確保已安裝nodejsyarn
用VS Code 打開檔案夾src\Coldairarrow.Web
MGHEOP.png
輸入命令:yarn
輸入命令:yarn run serve
成功運行后即可打開登錄頁面
MGH56I.png
輸入賬號:Admin,密碼:123456進入后臺主頁
MG22Bd.png

使用教程

系統配置

05.Coldairarrow.Api/appsettings.json中配置了系統的必要引數,其中包括資料庫型別、連接字串、日志配置等,具體配置參考注釋

快速開發

此功能為本框架的核心功能,能夠自動生產完整的可運行代碼,具體使用如下:

  • 配置資料源

首選需要有資料庫源,因為代碼生成是根據資料庫表來生成的,
選單:開發=>資料庫連接
MYpg8P.png
若串列中沒有目標資料源,則添加資料庫連接
MYphDg.png
資料連接名、連接字串、資料庫型別即可,添加完成后即可看到連接字串資訊,

  • 生成代碼

有了資料庫連接之后,即可進行代碼生成,
選單:開發=>代碼生成

MYpb80.png

選擇資料庫,然后勾選需要生成代碼的資料庫表,點擊生成代碼會彈出生成選項(這里演示勾選 Base_BuildTest,其余表全是系統基礎表,不要勾選,否則會被覆寫,導致例外,請勾選自己的業務表進行生成):

MYi3M6.png

生成選項中可以選擇需要生成的型別,默認生成全部:物體層、業務層、介面層(即控制器)和頁面(Vue前端頁面代碼),
生成區域請輸入業務模塊名(例如系統叫Base_Manage),請按具體業務填入(必填)
這里示例填寫TestManage,點擊生成按鈕,即可完成代碼生成,生成后的代碼在專案解決方案中,將代碼檔案包括進入專案

默認生成后的檔案會被自動包括到解決方案中,若沒有則需要點擊顯示所有檔案按鈕,即可看到生成后的新檔案

生成的物體層、業務邏輯層、控制器層代碼:
JKRu7j.png
前端生成的代碼:
MYiXWR.png

后端代碼添加后需要重新編譯下(F7),編譯后好可以看到有新的介面
MYQYcD.png
前端生成代碼后會自動保存并編譯(別的檔案修改保存也會自動編譯,畢竟編譯一次挺慢的),不放心可以Ctrl+C停止,然后再yarn run serve重新運行

代碼生成完畢,但是要展示到選單上需要進行配置,并且所有業務選單都是動態的(權限控制)
打開選單:系統管理=>權限管理=>新建
MYPsUJ.png
MYFUmT.png
選單名:即需要顯示的選單名
上級選單:選單是多級樹狀的,可以放在某個選單下面
型別:可以選擇選單或頁面,這里是具體的頁面,所以選頁面
路徑:頁面的路徑,選單可以不配置,這里配置為/TestManage/Base_BuildTest/List,這里設定規則為:views檔案夾為根路徑(即"/"),向下展開依次為/TestManage/Base_BuildTest/List,最后真正的串列頁為List.vue檔案,表單頁為EditForm.vue檔案
是否需要權限:若為“否”,則此頁面不限制權限,即所有人都能看
圖示:選單顯示圖示,具體到開發=>圖示選擇頁進行選擇
排序:若需要需要對選單進行排序則設定,默認0,型別為int
頁面權限:頁面擁有的權限(權限值唯一,作為操作權限即介面權限的依據),詳見權限管理

確認保存,然后重繪整個頁面(F5),即可看到全新生成的選單“生成測驗”
MYkvqK.png
MYAFxI.png
MYAVqf.png

整個代碼生成程序,無需撰寫代碼即可完成一張表的CRUD,當然需要根據具體業務中進行相應的修改,本次示例中欄位比較少,但是當一張表的欄位很多時,那么此功能能夠將開發效率提高幾個檔次,

管理員登錄

MGH56I.png
默認超級管理員賬號為:Admin
密碼為:123456

系統用戶管理

管理系統登錄的用戶
選單:系統=>用戶管理
點擊右側設定權限

系統角色管理

管理系統角色,角色是權限的載體,合理分配角色有利于權限管理
選單:系統=>角色管理
操作中可以設定角色的權限,詳情見<權限管理>模塊

權限管理

一般情況下,后臺管理系統多少會涉及權限管理,因此本框架提供了一個靈活、高效、簡潔的權限管理系統,

首先,權限分為兩種,即操作權限資料權限,其中操作權限主要包括選單權限和按鈕權限,在角色編輯表單中,給角色勾選需要的權限即可,用戶可以分配多個角色,繼承所有角色的權限,
MYET39.png
如上圖,按需勾選,有人會疑問為什么只有增、改和刪的權限而沒有查的權限,其實這里考慮到了當勾選“用戶管理”時,就已經默認擁有“查”的權限了,這里再設定“查”權限豈不是多此一舉,可以根據實際業務需求添加諸如申請、審核等權限,靈活應用,
這里的樹狀是和選單一一對應的,勾選哪些選單就擁有哪些選單

下面介紹下最常用的按鈕權限
MYVTIS.png

如上圖,在需要控制權限的按鈕使用v-if="hasPerm('Base_User.Add')",表示只有當用戶擁有權限值Base_User.Add才顯示此按鈕,權限值就是權限表單中配置的權限值

這里的按鈕級權限控制只能夠在前端控制操作入口,若系統對安全性要求較高,則需要控制介面權限
MYZNo8.png

如上圖,在需要權限控制的介面加上ApiPermission特性即可,引數也為權限值,只有擁有此權限才能訪問此介面

資料權限比較復雜,若采用純SQL方式,那么會更加復雜,本框架全程采用EF作為ORM框架,通過對IQueryable< T >進行過濾,即可完成資料權限控制,詳細使用方式見用戶管理

更詳細的使用方式,請參考源代碼中的用戶管理模塊(選單權限、操作權限、資料權限、聯表查詢、業務層AOP等使用方式均可參考此模塊)

介面秘鑰管理

作為對外介面簽名的AppId和AppSecret管理
選單:系統=>介面秘鑰管理

系統日志

選單:系統=>系統日志

操作日志

選單:系統=>操作日志

事務使用

系統采用AOP管理事務,使用十分簡單,只需要在需要事務包裹的方法中添加Transactional特性,無需任何其他處理,系統會自動捕捉例外并回滾,而且支持多庫事務(即使用多個不同的IRepository也會在同一個事務中處理)
JKWm26.png

讀寫分離分庫分表

系統采用EFCore.Sharding組件,具體使用方式請移步EFCore.Sharding

常見疑問

如何進行聯表查詢

框架使用EF+LINQ進行聯表操作,核心在于對IQueryable< T >的使用,另可網上搜EF+LINQ的相關教程,

示例如下:
Base_User表左連接Base_Department表獲取DepartmentName屬性

//定義資料模型類
public class Base_UserTestDTO : Base_User
{
    public string DepartmentName { get; set; }
}

//即BaseBusiness中的Service
var db = DbFactory.GetRepository();
Expression<Func<Base_User, Base_Department, Base_UserTestDTO>> select = (a, b) => new Base_UserTestDTO
{
    DepartmentName = b.Name
};
select = select.BuildExtendSelectExpre();
var q = from a in db.GetIQueryable<Base_User>().AsExpandable()
        join b in db.GetIQueryable<Base_Department>() on a.DepartmentId equals b.Id into ab
        from b in ab.DefaultIfEmpty()
        select @select.Invoke(a, b);
//篩選
var where = LinqHelper.True<Base_UserTestDTO>();
where = where.And(x => x.UserName == "Admin");

//獲取篩選資料
var list = q.Where(where).ToList();

原始碼可參考Base_UserBusiness.GetDataList

如何切換資料庫型別

修改05.Coldairarrow.Api/appsettings.json中的DatabaseType
修改相應的資料庫連接字串
安裝相應的資料庫Nuget包
注意:若使用Oracle,只能使用2.x版本的包(EFCore.Sharding也要降級為2.x),因為EF Core3.x版本暫不支持Oracle,其余版本資料庫使用最新版即可

JK4tR1.png
JK4rIH.png

如何使用多個資料庫

默認框架會自動注入IRepository作為資料庫訪問介面,在需要的時候注入即可,若系統需要操作多個資料庫,那么需要定義額外的介面繼承IRepository然后配置注入進去即可訪問

  • 先定義新的介面IMyRepository
    JKI3C9.png

  • 然后配置資料庫型別和連接字串
    JKINDK.png

  • 使用IMyRepository
    JKIr8A.png

這樣就可以在任何地方注入并使用IMyRepository,更多資料庫同理配置即可

結語

歡迎使用本框架,若覺得不錯,請比心

Github歡迎星星:https://github.com/Coldairarrow

博客園歡迎點贊:https://www.cnblogs.com/coldairarrow/

QQ群3:940069478
個人QQ:862520575(歡迎技術支持及商務合作,提供.NET Core + Linux + Nginx+ jenkins + git整套持續集成快速開發平臺

本人將會對這個快速開發框架不斷完善與維護,希望能夠幫助到各位
若遇到任何問題或需要技術支持,請聯系我
------學習永無止境,技術永無上限,代碼就是藝術------

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

標籤:.NET Core

上一篇:X-Admin&ABP框架開發-RBAC

下一篇:[視頻演示].NET Core開發的iNeuOS物聯網平臺,實作從設備&PLC、云平臺、移動APP資料鏈路倍訓

標籤雲
其他(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