我是在这个论坛上提问的新手 - 我希望我能正确地提出这个问题。
我试图解决的问题是:我有一个用于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,因此我不应该使用它。
关于我开始的地方的任何指示?
答案 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更好地利用时间。我知道有点失败的人。
亲切的问候。