ASP.NET Core와 플랫폼에 대한 이해가 없어서 헷갈리시는거 같네요. ASP.NET Core는 개발을 위한 sdk 집합이라고 할 수 있습니다. ASP.NET Core를 이용해서 웹서버, 데스크탑앱, 모바일 앱등을 만들 수 있습니다.
WPF도 ASP.NET Core에서 만들 수는 있지만 윈도우 전용의 데스크탑앱만 만들 수 있습니다.
결론적으로, ASP.NET Core 환경에서 웹서버 프로젝트를 만들고,
다시 별도의 프로젝트로 ASP.NET Core 환경의 WPF 앱을 만들어야되고,
이 둘은 TCP나 HTTP등의 기술을 이용해서 통신을 해야됩니다.
저는 WPF로 프로젝트를 생성하고 ASP.NET Core 관련 Nuget 패키지 설치한 후 WebHostBuilder를 생성하여 사용하고 있습니다. 이렇게 하면 WPF 앱에서 ASP.NET Core 서비스가 됩니다.
위에 @jamesnet214 님이 설명해주신 방법 참고하시면 됩니다.
@Code_Pasta 님이 말한 것 처럼 구성하면 정말 콘솔이 뜹니다. OutputType을 WinExe로 해도 콘솔창이 뜨는데요, 혹시나 해서 컴파일된 경로의 EXE를 직접 실행하니 콘솔이 뜨지 않고 실행되는 것으로 보아 Visual Studio 환경에서 핫리로드 등의 구성에 의해 콘솔이 뜨는것은 아닌가 추측합니다.
저는 자주 WPF 나 윈폼을 열고 간이 웹서버 (ASP.NET Core) 로 많이 사용 합니다.
용도는 다른 플랫폼 개발자와 협업인데요. 아무래도 그분들은 소켓을 통한 저수준 통신보다 HTTP 프로토콜이 편리하니 , 이러한 분들과 같이 일 할때 유용합니다. @jamesnet214 님께서 알려주신 방법도 가능하며, WPF 프로젝트 에서도 간단히 활용 하실 수 있습니다. WPF 의 csproj 파일에 아랫줄을 추가해주시면 자동으로 프레임워크가 붙습니다.
public App():base()
{
var webthread = new Thread(new ParameterizedThreadStart(delegate
{
new Communication.web.Startup(null);
}));
webthread .IsBackground = true;
webthread .Start();
}
처럼 별도 스레드로 웹서버 분리 하시면 ASP.NET CORE의 풀 피쳐를 사용 하실 수 있을껍니다.
늦었지만 도움이 되셨으면 좋겠네요.
WPF 앱이 반드시 필요한가요?
보통의 경우, full stack (Asp.Net core MVC/Wep Page/Blazor Server)앱을 만든는 쪽이 코드량과 관리 포인트가 적지 않을까요? Asp.Net Core 는 자체로 Kestrel 서버에 임베드되어 있기 때문에 내부망 정도에서는 아무런 무리가 없습니다.
웹앱이 UI를 제공하기 때문에 WPF가 필요하지는 않을 것 같습니다.
웹 UI 작성에 익숙치 않고, 서버가 주로 데이터만 주고 받는다면, Asp.Net Core Web Api 앱을 별도로 작성해서 돌리고, WPF는 이 서버에 대한 클라이언트로 동작하는 것이죠. API 서버에서 뭘 받아 오려면, HttpClient 객체를 사용하면 됩니다.
WPF 가 다른 기능을 이미 보유하고 있어서, 무조건 필요한 경우,
무거운 Asp.Net 프레임워크 전부를 가져다 쓰는 것보다, HttpListner 클래스를 통해 Http 서버 기능만 구현하는 방법도 있습니다. HttpListener Class (System.Net) | Microsoft Learn
아시겠지만, 리스닝을 무한 반복하는 게 서버의 본질입니다.
WPF에서 스레드를 생성하고, 그 안에서 리스닝을 무한 반복하게 만들면 서버 스레드가 되는 것이죠.
각 서버 스레드가 연결 리스트 형식의 Request 처리자를 호출하면, Request Pipeline 이 되는 것이죠.
이는 Asp.Net Core의 미들웨어가 사용되는 방식과 동일합니다.
이 경우, WPF UI 스레드, 서버 스레드, 요청 파이프 라인은 동일 Process 에서 돌아 가기 때문에 코드 공유를 할 수 있어, 통신이 간편하다는 장점이 있습니다.
만약 서버를 내부망 뿐만 아니라 외부망(인터넷)에도 노출해야 하는 상황이라면, Asp.Net Core 웹앱으로 정식 호스팅 하는 것이 좋을 것 같습니다.
이 경우도 WPF 앱은 클라이언트가 됩니다.