2010-03-13 6 views
2

Winforms로 작성된 데스크톱이 있습니다. 이제 사람들이 다른 컴퓨터의 데이터에 액세스하기를 원합니다. 먼저 일반 클라이언트/서버 앱에 대해 생각했지만, 이제는 앱이 HTTP 서버로 작동하고 연결된 브라우저에 HTML을 보낼 수 있다면 가장 좋을 것이라고 생각합니다.Winforms/WPF 앱이 HTTP 서버로 작동 할 수 있습니까?

앱에 HTTP 서버 기능을 추가 할 수있는 라이브러리가 있는지 누가 알 수 있습니까? 이상적으로는 ASP.NET 콘텐츠를 제공 할 수 있습니다.

답변

4

IIS가없는 자신의 응용 프로그램에서 ASP.NET 콘텐츠 (예 : .aspx 페이지)를 호스팅하려면 System.Web.Hosting 네임 스페이스의 클래스를 사용하십시오.

이 표준적인 사용 예는 Visual Studio ("Cassini"를 기반으로 함)와 함께 제공되는 독립형 테스트 웹 서버입니다. 소스 코드 "카시니는"이 여기에 있습니다 : http://msdn.microsoft.com/en-us/magazine/cc188791.aspx

IIS가 멀다만큼 견고하도록 서버를 기대 : http://blogs.msdn.com/dmitryr/archive/2008/10/03/cassini-for-framework-3-5.aspx 다음

이 주제에 (다소 일자) MSDN 기사입니다. 따라서주의 깊게 요구 사항을 평가하고 기대를 관리해야합니다.

+0

감사! 이것은 멋진 물건이다. MS가 프레임 워크 내에서 전체 ASP.NET에 대한 배관을 선적한다고 누가 생각했을까요? – user46703

1

이 작업을 수행 할 수 있습니다. HttpListener을보십시오. 나는 그것을 할 수있는 방법이있을 것이라고 확신하지만, ASP.NET 전체를 쉽게 호스팅 할 수 있다고 생각하지는 않습니다. 간단한 HTML을 보내는 것은 어렵지 않습니다.

  • 어떻게 다른 사람에 연결하는 시스템을 알려고 :

    , 나는 클라이언트/서버가 더 좋은 모델이 될하지 않을 것이라고 모르겠어요했다가 있습니까?
  • 다른 사람이 실수로 응용 프로그램을 닫으면 어떻게됩니까?
  • 기기를 종료하거나 재부팅하려면 어떻게해야합니까?
  • 스트레이트 ASP.NET 응용 프로그램보다 실행이 더 복잡 할 수 있습니다.

기본적으로 모든 도구는 서버에서 ASP.NET을 쉽게 호스팅 할 수 있도록 만들어졌습니다. 여기서 클라이언트와 서버를 병합 할 때 의 이점은 무엇입니까?

+0

Jon, 질문이 유효합니다. 이 응용 프로그램이 클라이언트/서버로 보이기를 원하지만이 옵션을 열어 너무 많은 코드 변경없이 전체 웹 응용 프로그램으로 마이그레이션하려는 독특한 시나리오입니다. 앱이 다운되었을 때 클라이언트가 연결할 수 없다는 사실은이 특정 앱의 "보안 기능"으로 볼 수 있습니다. – user46703

+0

@ user46703 : 음. 솔직히 말해서 이익보다 혼란을 더 많이 느낄 것입니다. 이 방법으로 개발하는 데는 여러 가지 단점이 있다는 것을 알게 될 것입니다. 비교적 특이한 상황에 대한 도구 지원과 관련해서는 최소한입니다. –

+0

대부분의 GUI는 이미 jQuery를 사용하여 작성되었으며 웹 브라우저 컨트롤 내에서 실행됩니다. 이것은 조금 이상하지만 표시해야하는 내용은 HTML과 CSS에 매우 적합합니다. 콘텐츠를 제 집 HTTP 서버에서 제어 할 수 있으므로 놀랄만 한 놀라움이 없습니다. 나는 이것이 효과가있을 것이라고 생각한다. – user46703

2

Jon이 말한 것처럼 HttpListener를 사용하여 HTTP 서버를 구현할 수 있습니다. ASP.NET 콘텐츠를 제공하는 경우 System.Web.Hosting 네임 스페이스를 참조하십시오.

디자인에서주의해야 할 점 중 하나는 응용 프로그램이 실행되는 동안에 만 HTTP 서버를 사용할 수 있다는 것입니다. 따라서 데스크톱 응용 프로그램 사용자가 닫거나 로그 오프하면 다른 사람들이 더 이상 웹 인터페이스를 통해 데이터에 액세스 할 수 없게됩니다. 따라서 접근 방식을 재고하고 대신 데이터 액세스 기능을 IIS에서 호스팅하는 ASP.NET 응용 프로그램에서 호출 할 수있는 별도의 DLL로 차단할 수 있습니다.

0

HttpListener 코드를 분해하고 컴퓨터가 가동되는 동안 작동하는 Windows 서비스를 개발하는 것을 고려해보십시오. 이렇게하면 데스크톱 응용 프로그램을 항상 실행하고 IIS와 같은 웹 서버를 구입할 필요없이 오래도록 HTML을 제공 할 수 있습니다.

브라우저가 아닌 클라이언트가 더 다양한 유형의 클라이언트와 통신 할 수있게하려면 WCF를 살펴보십시오. WCF를 사용하면 모든 .NET 응용 프로그램에서 서비스를 호스팅 할 수 있습니다. Winforms, WPF, Windows 서비스, ASP.NET, 콘솔 등 beit.

0

다른 경로로 이동하는 것이 좋습니다. 데스크톱 응용 프로그램을 SQL Server Express와 같은 상업용 데이터베이스 서버와 교환하도록 변경 한 다음 웹 사이트를 구축하십시오. 그 데이터베이스와도 대화 할 수 있습니다.

+0

사용자가 데이터를 이해하는 데 필요한 논리가 포함 된 .aspx 페이지가 여러 개 있으면 어떻게 될까요? 이것은 아마도 기존 코드를 가능한 한 많이 재사용해야하는 이유 일 것입니다. –

+0

예, 코드를 다시 사용하고 싶습니다. 내 로컬 응용 프로그램은 jQuery를 많이 사용하여 WebBrowser 컨트롤에서 대부분의 GUI를 수행합니다. System.Web.Hosting의 도움으로 데이터베이스 코드뿐만 아니라 데스크톱 응용 프로그램과 전체 웹 응용 프로그램 사이의 대부분의 GUI 코드도 공유 할 수 있어야합니다. – user46703

+0

비즈니스 로직의 대부분이 웹 브라우저 컨트롤을위한 페이지에 있다면 그렇습니다. 이것을 무시하십시오. 그러나 귀하의 winforms 태그를 보았습니다. 일반적으로 비즈니스 로직이 앱에 있음을 의미하며, 일반적으로 어쨌든 많은 것을 다시 구현한다는 의미입니다. –

관련 문제