我有一个ASMX Web服务,其代码完全在代码隐藏文件中,因此.asmx
文件的全部内容为:
<%@ WebService Language="C#" CodeBehind="~/App_Code/AddressValidation.cs" Class="AddressValidation" %>
在我的测试机器(带有IIS 5的Windows XP)上,我为这个ASP.NET 2.0解决方案设置了一个虚拟目录,一切都很好。我的所有代码都很好地分开,只是有效。
但是,当我们将此解决方案部署到我们的Windows Server 2003开发环境时,我们注意到代码仅在所有代码直接删除到.asmx
文件时编译,这意味着该解决方案不起作用代码隐藏。我们无法弄清楚为什么会这样。
我们在开发环境中设置的一个不同之处在于,我们不是仅为此解决方案创建单独的虚拟目录,而是将其放入运行经典ASP应用程序的现有目录中。所以这里我们在一个包含经典ASP应用程序的目录中有一个带有ASP.NET 2.0应用程序的文件夹。当然,如果所有代码都在.asmx
文件中而不在代码隐藏中,ASP.NET 2.0应用程序中的所有内容都可以工作,但我们真的很想知道为什么它不能识别代码隐藏文件和正确编译。
答案 0 :(得分:1)
正如其他人所提到的,将解决方案构建为“Web应用程序项目”可能是更好的做法。这样,您的代码将被预编译为在服务器上运行。
以下解决方案适用于我们:在IIS中,导航到网站中包含解决方案的文件夹。右键单击该文件夹,然后选择属性。在目录标签中的应用程序设置下,点击创建,将文件夹转换为应用程序(我相信这也可以通过制作完成文件夹是一个虚拟目录)。然后,确保将ASP.NET配置设置为使用ASP.NET 2.0版。我们遇到的问题是较大的目录在ASP.NET 1.0下运行,因此我们必须完成此步骤才能使此目录使用ASP.NET 2.0。
答案 1 :(得分:0)
您可能在网站“项目”和Web应用程序项目之间存在差异。在网站项目中,所有文件都是动态编译的。在Web应用程序项目中,您必须首先构建代码。
您应该将Web应用程序项目用于Web服务。使用File-&gt; New Project并选择适当的项目类型。然后构建项目,最后使用“发布”命令部署到IIS。
答案 2 :(得分:0)
我不确定我能否解释为什么它不起作用,但是在App_Code文件夹中放置Code文件似乎是一件狡猾的事情。 App_Code文件将被编译为单个程序集。因此,代码中的代码将在此程序集中结束,即使它不打算这样做。
我首先在与.asmx文件夹相同的文件夹中创建一个AddressValidation.asmx.cs文件,然后调整asmx文件的CodeBehind属性。从App_Code文件夹中删除该文件,并将其内容放在新的.asmx.cs文件中。
检查这在XP环境中是否有效,然后将其移动到目标服务器。