代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

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

  •  3
  • JL. Hans Passant  · 技术社区  · 14 年前

    不好意思冠名,不过我最好解释一下这个问题。

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

    1. 类库
    2. 由Web服务(ASMX)组成的Web应用程序。

    Web服务的代码位于app_code文件夹中,文件为[WebServiceName].cs。

    在WebService代码隐藏类中,我有一个Web方法,这里是一个示例(它简化了):

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

    现在在设计阶段,在Visual Studio(2010或2008)中,当我右键单击UploadTaskManager,然后选择“转到定义”。我被带到appdata\temp[一些文件夹结构]…等。它显示了公共类的定义。

    相反,我希望有完整的集成,这样我就可以直接进入类库项目中的实际类。

    我的猜测是,这是因为我使用的是应用程序代码路由,而不是Web服务类的编译文件。但我不知道其他的方法。

    我怎么修这个?可能不需要应用程序代码目录?

    2 回复  |  直到 14 年前
        1
  •  3
  •   John Saunders Andrey Morozov    14 年前

    必须使用“文件”->新建网站来创建Web服务。我强烈建议您不要在网站中构建Web服务。

    相反,通过使用文件-gt;新建项目并选择“WCF服务应用程序”来创建Web服务。如果您一直在使用ASMX Web服务(微软现在认为这是“传统技术”),请选择“ASP.NET Web服务应用程序”。

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

    除此之外,将没有app_code文件夹。

        2
  •  2
  •   JL. Hans Passant    14 年前

    很简单

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

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

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

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

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

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

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

    第7步,测试!