如何在不使用app_code目录的情况下编写asmx Web服务?

时间:2010-06-01 11:01:32

标签: .net web-services asmx

请原谅标题,但我最好解释一下这个问题。

我的解决方案中有2个项目

  1. 班级图书馆
  2. Web应用程序,由Web服务(asmx)组成。
  3. 网络服务的代码位于app_code文件夹中,文件为[webservicename] .cs

    在课堂后面的webservice代码中,我有一个web方法,这是一个示例(简化):

    [WebMethod]
    public EnumTaskExportState ProcessTask()
    {
        var tm = new UploadTaskManager();
        return tm.ProcessTask();
    }
    

    现在在设计时,在visual studio(2010或2008)中,当我右键单击UploadTaskMananger,然后选择“转到定义”。我被带到AppData \ Temp [一些文件夹结构] ......等....它显示了公共类定义。

    相反,我想要完全集成,这样我就可以直接进入类库项目中的实际类。

    我的猜测是,这种情况正在发生,因为我使用的是app_code路由,而不是Web服务类的编译文件。但我不知道有任何其他方法可以做到这一点。

    我该如何解决这个问题?可能会取消对app_code目录的需求吗?

2 个答案:

答案 0 :(得分:3)

您必须使用File-> New Web Site创建Web服务。我强烈建议您永远不要在网站上构建Web服务。

而是使用File-> New Project并选择“WCF Service Application”来创建您的Web服务。如果您使用ASMX Web服务(Microsoft现在认为是“遗留技术”),请选择“ASP.NET Web服务应用程序”。

这些都是Web应用程序项目,其行为与Visual Studio中的所有其他项目类型相同。

除此之外,还没有App_Code文件夹。

答案 1 :(得分:2)

非常简单

步骤1 ...当您生成新的Web服务时,也会生成app_code / .cs文件。 从该类复制签名,它将在步骤4中用作模板。

第2步...删除生成的app_code / .cs文件

步骤3.在类文件中,创建一个名称空间和文件夹结构,您将在其中包含包含Web方法的Web服务类。例如Class1.WebServices

步骤4.在命名空间Class1.WebServices中(如上例所示),创建一个新类,然后用步骤1中复制的类签名替换默认类签名。

步骤5.立即编辑Web服务,并创建Web方法

步骤6.在Web应用程序中,编辑asmx文件以引用没有代码的类,例如

<%@ WebService Language="C#"  Class="Class1.WebServices.WebServiceClass" %>

第7步,测试!