.NET/개념 및 유용한 팁
-
[EntityFramework Core] dbContext 여러 번 사용시 유의사항 (feat. Dbset 프로퍼티 데이터 불일치 현상).NET/개념 및 유용한 팁 2021. 3. 6. 11:52
회사에서 솔루션 개발중 겪은 뻘짓이 있어 기록한다. 현재 메일발송 서비스를 개발중에 있는데, 기존 DB와 신규 서비스의 DB 구조가 달라 호환을 위해 완료된 데이터를 기존 DB에도 입력하는 기능을 구현했다. 신규 DB에서 완료된 조건에 일치하는 데이터만 Where() 함수를 통해 가져와서 기존 DB에 Insert하는 작업인데, 조건에 부합되는 항목들을 Insert 하려니 "발송대기" 상태인 초기값으로 나온다. Worker Service Task 를 여러 개 사용하는 구조인데, Task는 각각 역할이 정해져있으며, ConcurrentQueue를 통해 데이터를 단방향으로 처리하기 때문에 스레드에 의한 데이터 불일치 현상이 일어나는 구조는 아니다. 설명이 어려우니 재현을 위해 소스코드를 준비해보겠다. .NET..
-
[EntityFramework Core] Worker 서비스에 DBContext DI 설정에 의한 System.AggregateException 오류 발생시 처리.NET/개념 및 유용한 팁 2021. 2. 18. 22:38
Worker 서비스 개발 중 아래와 같은 오류를 접하였다. System.AggregateException: 'Error while validating the service descript(Error while validating the service descriptor 'ServiceType: Microsoft.Extensions.Hosting.IHostedService Lifetime: Singleton ImplementationType: Cannot consume scoped service ASP.NET Core에선 나오지 않았던 오류인데 대충 해석하면 Singleton lifecycle 기반으로 동작하는 BackgroundService Worker에 Scoped 으로 설정된 서비스는 의존성 주입(D..
-
[EntityFramework Core] The database provider attempted to register an implementation of the 'IRelationalTypeMappingSource' service 오류가 나올때 확인사항.NET/개념 및 유용한 팁 2021. 2. 18. 21:40
현재 개발중인 닷넷 코어기반 Worker 서비스에서 MySQL을 이용하기위해 EntityFrameworkCore + Pomelo.EntityFramework.MySql 조합으로 Nuget 패키지를 구성했다. EFCorePowerTools를 이용해서 자동 생성해서 구축했기 때문에 큰 문제가 없을 줄 알았는데, 아래와 같은 오류가 표시되었다. Could not load file or assembly 'Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. 지정된 파일을 찾을 수 없습니다. dll을 찾을 수 없다는 오류였기 때문에 Nuget 패키지에서 해당 DLL을 찾아 설치했다. 그랬더니..
-
[.NET] List 배열을 Random 정렬하는 간단한 소스코드 예시.NET/개념 및 유용한 팁 2021. 2. 12. 11:47
개인프로젝트 진행하다가 .NET에서 코드 1줄로 랜덤 정렬 구현하는 방법을 정리할 겸 작성. using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; namespace RandomArrayTest { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); List list = new List() { 1,2,3,4,5,6,7,8,9,10 }; // 랜덤으로 정렬시킬 List (어떤 유형이건 상관없음) list.Sort((a, b) => new Random().NextDouble() >= 0.5? 1 : -1); /..
-
[.NET] AppContext.BaseDirectory 와 Environment.CurrentDirectory 위치 차이점 및 유의사항.NET/개념 및 유용한 팁 2021. 2. 1. 18:45
닷넷으로 개발하는 사람들중에서 현재 프로그램이 실행되는 위치를 가져와야하는 경우가 발생할 수 있다. 그럴때 AppContext.BaseDirectory 또는 Environment.CurrentDirectory를 사용하게 될 것이다. 간단한 Console 프로젝트를 만든 뒤, 해당 소스처럼 작성하고 디버깅해보자. 이름은 ConsoleApp1 이라고 지었다. class Program { static void Main(string[] args) { Console.WriteLine("Console App1"); Console.WriteLine(AppContext.BaseDirectory); Console.WriteLine(Environment.CurrentDirectory); } } 실제 실행결과는 스크린샷과 ..
-
[.NET] 간략한 메일(Mail)발송 프로그램 예제.NET/개념 및 유용한 팁 2021. 1. 19. 20:49
sendmail 이나 qmail 같은 메일서버를 구축하는 것이 아닌, 단 몇줄의 코드만으로도 메일발송전용 프로그램을 만들 수 있다. 위키백과에 소개된 것처럼 SMTP 프로토콜을 구현해서 발송하면 되는데, 훌륭한 라이브러리가 있으므로 굳이 일일히 구현할 필요는 없다. (라이브러리는 하단에 소개한다.) https://ko.wikipedia.org/wiki/%EA%B0%84%EC%9D%B4_%EC%9A%B0%ED%8E%B8_%EC%A0%84%EC%86%A1_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C 간이 우편 전송 프로토콜 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)..
-
[ASP.NET Core] 배포환경에서 File Download 기능에 An unhandled exception has occurred while executing the request. 오류 발생하는 현상.NET/개념 및 유용한 팁 2021. 1. 15. 22:49
IIS에서 배포한 웹서비스에서 파일을 다운로드하는 기능이 "An unhandled exception has occurred while executing the request." 오류메시지만을 띄운 채 동작하지 않는 문제가 있었다. 개발PC의 IIS, 개발PC의 Kestrel, 배포환경의 Kestrel 모두 다운로드가 정상동작했지만, 배포환경에서의 IIS만 다운로드 기능이 동작하지 않았다. 이전에 작성했던 상세오류를 보는 방법을 통해 원인을 찾으려 했지만, 뭐가 문제인지 Development로 실행시키면 동작하지 않는 문제가 있었다. https://ddochea.tistory.com/73 [ASP.NET Core] "An error occurred while starting the application."..
-
[ASP.NET Core] "An error occurred while starting the application." 떴을 때 상세 오류 확인방법.NET/개념 및 유용한 팁 2021. 1. 9. 11:28
ASP.NET Core 기반 웹서비스를 개발한 후, IIS에 올려 정식서비스 오픈을 준비중이었다. 그런데 Kestrel 과 개발PC 내 IIS 에선 정상동작하던 웹 서비스가 실제 구축할 서버에서는 아래와 같은 메시지가 떴다. "An error occurred while starting the application." Dotnet core 호스팅 번들을 다시설치해보고, 서버도 껐다 켜보고, Core SDK도 설치해봤지만 해결되지 않던 중 stackoverflow에서 아래와 같은 방법을 통해 원인을 찾아보는 방법을 알게되었다. 총 2가지를 수정해야 한다. Program.cs public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateD..