add webhosting
This commit is contained in:
190
ArinWarev1/WebServer/README.md
Normal file
190
ArinWarev1/WebServer/README.md
Normal file
@@ -0,0 +1,190 @@
|
||||
# OWIN 정적 파일 호스팅 서버
|
||||
|
||||
ECO2 프로젝트에 OWIN 기반 내장 웹 서버를 추가하여 HTML 리포트 및 정적 파일을 호스팅할 수 있습니다.
|
||||
|
||||
## 설치 방법
|
||||
|
||||
### 1. NuGet 패키지 설치
|
||||
|
||||
Visual Studio에서 Package Manager Console을 열고 다음 명령을 실행하세요:
|
||||
|
||||
```powershell
|
||||
# ECO2_2025V1 프로젝트를 기본 프로젝트로 선택 후 실행
|
||||
|
||||
Install-Package Microsoft.Owin -Version 2.1.0
|
||||
Install-Package Microsoft.Owin.Host.HttpListener -Version 2.1.0
|
||||
Install-Package Microsoft.Owin.Hosting -Version 2.1.0
|
||||
Install-Package Microsoft.Owin.StaticFiles -Version 2.1.0
|
||||
Install-Package Owin -Version 1.0
|
||||
```
|
||||
|
||||
또는 패키지 관리자 UI에서 다음 패키지를 검색하여 설치:
|
||||
- Microsoft.Owin (2.1.0)
|
||||
- Microsoft.Owin.Host.HttpListener (2.1.0)
|
||||
- Microsoft.Owin.Hosting (2.1.0)
|
||||
- Microsoft.Owin.StaticFiles (2.1.0)
|
||||
- Owin (1.0)
|
||||
|
||||
### 2. 프로젝트에 파일 추가
|
||||
|
||||
다음 파일들이 `WebServer` 폴더에 추가되었습니다:
|
||||
- `StaticFileServer.vb` - 메인 서버 클래스
|
||||
- `Startup.vb` - OWIN 시작 구성
|
||||
- `Example_WebServer_Usage.vb` - 사용 예제
|
||||
|
||||
Visual Studio에서 프로젝트를 다시 로드하면 자동으로 인식됩니다.
|
||||
|
||||
## 사용 방법
|
||||
|
||||
### 기본 사용법
|
||||
|
||||
```vb
|
||||
Imports Eco2Ar.WebServer
|
||||
Imports System.IO
|
||||
|
||||
' 1. 서버 인스턴스 생성
|
||||
Dim wwwrootPath As String = Path.Combine(Application.StartupPath, "wwwroot")
|
||||
Dim server As New StaticFileServer(wwwrootPath, 58123)
|
||||
|
||||
' 2. 서버 시작
|
||||
server.Start()
|
||||
|
||||
' 3. 브라우저에서 열기
|
||||
server.OpenInBrowser()
|
||||
|
||||
' 4. 사용 후 서버 중지
|
||||
server.Stop()
|
||||
```
|
||||
|
||||
### MdiMain에 통합
|
||||
|
||||
`MdiMain.vb`에 다음 코드를 추가:
|
||||
|
||||
```vb
|
||||
Public Class MdiMain
|
||||
Private webServer As StaticFileServer
|
||||
|
||||
Private Sub MdiMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
' ... 기존 코드 ...
|
||||
|
||||
' 웹 서버 시작
|
||||
Try
|
||||
Dim wwwPath = Path.Combine(Application.StartupPath, "wwwroot")
|
||||
webServer = New StaticFileServer(wwwPath)
|
||||
webServer.Start()
|
||||
Catch ex As Exception
|
||||
Debug.WriteLine("웹 서버 시작 실패: " & ex.Message)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Private Sub MdiMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
|
||||
' ... 기존 코드 ...
|
||||
|
||||
' 웹 서버 정리
|
||||
If webServer IsNot Nothing Then
|
||||
webServer.Stop()
|
||||
webServer.Dispose()
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
```
|
||||
|
||||
### HTML 리포트 생성 및 표시
|
||||
|
||||
```vb
|
||||
' HTML 리포트 빌더 사용
|
||||
Dim builder As New HtmlReportBuilder("건물 에너지 분석 리포트")
|
||||
|
||||
builder.AddSection("1차 에너지 소요량")
|
||||
builder.StartTable("항목", "값", "단위")
|
||||
builder.AddRow("난방", "123.45", "kWh/m²·year")
|
||||
builder.AddRow("냉방", "67.89", "kWh/m²·year")
|
||||
builder.EndTable()
|
||||
builder.EndSection()
|
||||
|
||||
Dim html As String = builder.Build()
|
||||
|
||||
' 파일 저장
|
||||
Dim reportPath As String = Path.Combine(webServer.RootPath, "report.html")
|
||||
File.WriteAllText(reportPath, html, System.Text.Encoding.UTF8)
|
||||
|
||||
' 브라우저에서 열기
|
||||
webServer.OpenFileInBrowser("report.html")
|
||||
```
|
||||
|
||||
## 폴더 구조
|
||||
|
||||
```
|
||||
C:\eco2\debug_2016\
|
||||
├─ Eco2Ar.exe
|
||||
└─ wwwroot\ # 정적 파일 루트 디렉토리
|
||||
├─ index.html # 기본 페이지
|
||||
├─ report.html # 생성된 리포트
|
||||
├─ css\
|
||||
│ └─ styles.css
|
||||
├─ js\
|
||||
│ └─ scripts.js
|
||||
└─ images\
|
||||
└─ logo.png
|
||||
```
|
||||
|
||||
## 주요 기능
|
||||
|
||||
### StaticFileServer 클래스
|
||||
|
||||
- **Start()** - 웹 서버 시작
|
||||
- **Stop()** - 웹 서버 중지
|
||||
- **OpenInBrowser()** - 기본 브라우저에서 루트 URL 열기
|
||||
- **OpenFileInBrowser(relativePath)** - 특정 파일을 브라우저에서 열기
|
||||
- **GetFileUrl(relativePath)** - 파일의 전체 URL 반환
|
||||
- **IsRunning** - 서버 실행 상태 확인
|
||||
- **BaseUrl** - 서버 URL (http://localhost:58123)
|
||||
- **RootPath** - 정적 파일 루트 경로
|
||||
|
||||
### HtmlReportBuilder 클래스
|
||||
|
||||
간단한 HTML 리포트를 코드로 생성할 수 있는 헬퍼 클래스입니다.
|
||||
|
||||
## 포트 정보
|
||||
|
||||
- **기본 포트**: 58123 (일반적으로 사용하지 않는 포트)
|
||||
- 필요 시 생성자에서 다른 포트 지정 가능: `New StaticFileServer(path, 9999)`
|
||||
|
||||
## 보안 주의사항
|
||||
|
||||
- 이 웹 서버는 **localhost**에서만 접근 가능합니다 (외부 접근 불가)
|
||||
- 민감한 정보를 wwwroot에 저장하지 마세요
|
||||
- 필요한 경우에만 서버를 실행하고 사용 후 중지하세요
|
||||
|
||||
## 문제 해결
|
||||
|
||||
### "포트가 이미 사용 중입니다" 오류
|
||||
|
||||
다른 프로그램이 58123 포트를 사용 중일 수 있습니다. 다른 포트를 사용하세요:
|
||||
|
||||
```vb
|
||||
Dim server As New StaticFileServer(wwwrootPath, 58124)
|
||||
```
|
||||
|
||||
### "관리자 권한이 필요합니다" 오류
|
||||
|
||||
일부 환경에서는 HTTP.sys 리스너 등록에 관리자 권한이 필요할 수 있습니다.
|
||||
다음 명령을 관리자 권한 명령 프롬프트에서 실행:
|
||||
|
||||
```cmd
|
||||
netsh http add urlacl url=http://+:58123/ user=Everyone
|
||||
```
|
||||
|
||||
### 패키지 설치 오류
|
||||
|
||||
.NET Framework 4.0 타겟 프로젝트이므로 반드시 2.x 버전의 OWIN 패키지를 사용해야 합니다.
|
||||
최신 버전(4.x)은 .NET Framework 4.5 이상이 필요합니다.
|
||||
|
||||
## 예제 코드 위치
|
||||
|
||||
더 자세한 사용 예제는 `Example_WebServer_Usage.vb` 파일을 참고하세요.
|
||||
|
||||
## 참고 자료
|
||||
|
||||
- [OWIN 공식 문서](http://owin.org/)
|
||||
- [Microsoft.Owin 문서](https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/)
|
||||
Reference in New Issue
Block a user