将.asmx Web服务作为Windows服务运行

时间:2015-05-19 17:40:16

标签: c# visual-studio-2010 web-services wcf asmx

我是在这个论坛上提问的新手 - 我希望我能正确地提出这个问题。

我试图解决的问题是:我有一个用于Web服务的Visual Studio 2010项目。完成工作的班级在" .asmx"中定义。文件。该类继承自" System.Web.Services.WebService"类。

它在服务器上的IIS上运行愉快。客户端可以对Web服务进行SOAP调用,并对请求进行操作并发送响应。这一切都很好。

问题在于我希望它能够在我无法安装IIS的Windows 7 PC上运行。所以我希望它作为Windows服务运行(如果可能的话)。唯一的"客户"该服务将是该PC上的用户。

换句话说,我希望将我的.asmx中的所有代码作为Windows服务运行(如果可能的话)。

在理想的世界中,我能够重用现有的.asmx(如果可能的话),而不必将我的所有代码复制并粘贴到新的Windows服务解决方案中。

所以我的目标是找到将.asmx Web服务作为Windows服务运行的最新方法。我希望有人能指出我如何实现这一目标的正确方向。

我已经做了很多搜索,看起来这很有可能。问题是那里有很多解决方案,似乎有些过时了。或者我的概念相当混乱。

基于" How can I deploy my WCF Service without IIS?",我已经看了几件事。

我最接近的是:" https://msdn.microsoft.com/en-us/library/ms751414.aspx"。但是,在此示例中,执行工作的实际类(计算器)实际上包含在服务本身中。我原以为你可以将它们分开。换句话说,让服务创建来自我的.asmx文件的类的实例。

第二次关闭我遇到的是" https://msdn.microsoft.com/en-us/library/bb332338.aspx#msdnwcfhc_topic4"但是这是.NET 3.0和VS 2005.我也很难理解如何链接我现有的课程进入服务。

我遇到的其他解决方案建议添加对" Microsoft.Web.Services3.dll"," System.Web.dll"和" System.Web.Services的引用.dll",虽然有些人似乎认为这被称为WSE,它在.net 4.0中更新为WCF,因此我不应该使用它。

关于我开始的地方的任何指示?

2 个答案:

答案 0 :(得分:0)

在理想的世界中,您可以切换到WCF,因为它可以轻松地自托管,托管服务等等。并且有很多例子。将代码从ASMX迁移到WCF很容易。但这是3.5,因为NetFX(WCF,WF和WPF在3.5下发布)。

使用ASMX,您需要一台服务器来托管。你可以创建一个简单的服务器"使用HttpListener类。这可能对您的目的来说足够重。

https://msdn.microsoft.com/en-us/library/system.net.httplistener(v=vs.85).aspx

IIS现在有一个可托管的核心,可以与较新版本的.NET一起使用,但是如果你不能安装较新版本并且必须让客户端机器保持在3.0,那么它可能不是你最好的选择。

您可能能够为Cassini挖掘旧的源代码,这是微软的实施,最终成为可托管的Web核心。

早在2008年,有人在VS中窃取了服务器,这可能是一种选择。请注意,此页面上的版本适用于VS 2008,这意味着4.0: http://www.codeproject.com/Articles/23939/Light-IIS-Run-Asp-net-without-IIS

Ultidev有一个报告给自托管的服务器:http://ultidev.com/download/default.aspx

希望其中一项有所帮助。

答案 1 :(得分:0)

为了完整起见,我就是这样解决的:

最后,我在客户端PC上运行IIS,并继续使用asmx。

我发现将asmx转换为WCF非常棘手。确切地说,它是asmx中的线程处理(由其他人编码的线程处理),我发现很难转换。为了进一步解释我试图转换的asmx,它在一个继承自“System.Web.Services.WebService”的类中完成了所有工作。因此,它可以创建一个“应用程序”实例,然后用它来进行线程管理。

因此,使用“System.ServiceModel”(不允许我创建“应用程序”实例)而不是尝试做同样的事情,我认为在客户端PC上使用IIS更容易。我认为这比使用相当复杂的asmx更好地利用时间。我知道有点失败的人。

亲切的问候。