2010-03-13 126 views
2

我有用Winforms编写的桌面。现在我要求人们想要从其他机器访问数据。首先,我想到了一个常规的客户端/服务器应用程序,但现在我认为最好的情况是应用程序可以充当HTTP服务器并将HTML发送到连接的浏览器。Winforms/WPF应用程序可以充当HTTP服务器吗?

有谁知道是否有可用的HTTP服务器功能添加到应用程序库?理想情况下,它将能够提供ASP.NET内容。

回答

4

接待来自自己的应用程序(不包括IIS)ASP.NET内容(如.aspx页),在System.Web.Hosting命名空间中的类。

的这个典型的例子是使用附带的Visual Studio(根据“卡西尼”号)的独立测试Web服务器。源代码“卡西尼”号就可以在这里找到:http://blogs.msdn.com/dmitryr/archive/2008/10/03/cassini-for-framework-3-5.aspx

下面是关于这个问题的(有些过时)MSDN文章:http://msdn.microsoft.com/en-us/magazine/cc188791.aspx

期待你的服务器是一样强大IIS是一个长镜头。所以一定要仔细评估你的需求和管理您的期望:)

+0

谢谢!这是很酷的东西。谁会认为MS正在为框架内的完整ASP.NET提供管道? – user46703 2010-03-13 20:33:43

1

你绝对可以这样做。看看HttpListener。我不认为它可以轻松托管完整的ASP.NET,但我确信有这样做的方法。发送简单的HTML并不难。

说了这么多,我不知道该客户端/服务器将不会是一个更好的模式:

  • 如何其他人会知道要连接的机器吗?
  • 如果您在其他人使用它时意外关闭了应用程序,该怎么办?
  • 如果您想关闭机器或重新启动它,该怎么办?
  • 运行比直接的ASP.NET应用程序可能更复杂。

基本上所有的工具都可以轻松地在服务器上托管ASP.NET。 好处在这里合并客户端和服务器在哪里?

+0

乔恩, 您的问题是有效的。这是一个独特的场景,我希望应用看起来像客户端/服务器,但我希望保持该选项的开放性,以便在没有太多代码更改的情况下迁移到完整的Web应用。 客户端在应用程序关闭时无法连接的事实可以被视为这个特定应用程序的“安全功能”。 – user46703 2010-03-13 20:23:40

+0

@ user46703:嗯。我怀疑你会发现这比实际上的好处更麻烦。我认为你会发现以这种方式开发它有各种缺点 - 尤其是在相对不寻常的情况下支持工具。 – 2010-03-13 21:03:22

+0

大部分的图形用户界面已经在jQuery的帮助下编写,并且在网络浏览器控件中运行。这有点不寻常,但我必须展示的内容非常适合HTML和CSS。 我可以控制内容我的自制HTTP服务器,所以没有不好的意外。 我认为这会奏效。 – user46703 2010-03-14 22:39:46

2

正如Jon所说,你可以使用HttpListener来实现一个HTTP服务器。要提供ASP.NET内容,请参阅System.Web.Hosting命名空间。

有一点要注意的与您的设计是你的HTTP服务器将仅在应用程序运行时可用。因此,当桌面应用的用户关闭或注销时,其他人将不再能够通过您的Web界面访问数据。因此,您可能需要重新考虑您的方法,并将数据访问功能分解为单独的DLL,然后您可以从IIS托管的ASP.NET应用程序中调用该DLL。

0

你可以考虑分解出HttpListener代码,并开发一个Windows服务是了,而你的机器了。这将允许您以长期的方式提供HTML,而无需让您的桌面应用程序始终运行,而无需获取像IIS这样的Web服务器。

如果你想允许通信与客户的不仅仅是浏览器的一个更广泛的异质性,考虑WCF。使用WCF,一个服务可以由任何.NET应用程序托管; Beit Winforms,WPF,Windows服务,ASP.NET,控制台等,允许在各种介质上的HTTP通信,TCP,命名管道等

0

我建议你去不同的路线:改变你的桌面应用程序交谈像SQL Server Express的商业数据库服务器,然后建立自己的网站与该数据库交谈。

+0

如果用户有一堆.aspx页面包含需要理解数据的逻辑,该怎么办?这可能是问题的原因:尽可能多地重用现有的代码。 – 2010-03-13 20:27:11

+0

是的,我想重用我的代码。我的本地应用程序在大量使用jQuery的WebBrowser控件中执行大部分GUI。 在System.Web.Hosting的帮助下,我应该能够共享不仅数据库代码,而且甚至可以共享桌面应用程序和完整的Web应用程序之间的大多数GUI代码。 – user46703 2010-03-13 20:36:41

+0

如果您的大多数业务逻辑都是在网页浏览器控件的页面中,那么是的,忽略这一点。但是我看到了你的winforms标签,这通常意味着业务逻辑在应用程序中,而这通常意味着无论如何都要重新实现它。 – 2010-03-13 20:54:22

相关问题