【问题标题】:How to write an asmx web service without using app_code directory?如何在不使用 app_code 目录的情况下编写 asmx Web 服务?
【发布时间】:2010-06-01 11:01:32
【问题描述】:

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

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

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

网络服务的代码位于 app_code 文件夹中,文件 [webservicename].cs

在类后面的 web 服务代码中,我有一个 web 方法,这里是一个示例示例(其简化):

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

现在在设计时,在 Visual Studio(2010 或 2008)中,当我右键单击 UploadTaskMananger,然后选择“转到定义”。我被带到 AppData\Temp[some folder structure]...etc.... 它显示公共类定义。

相反,我希望进行完全集成,以便直接进入类库项目中的实际类。

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

我该如何解决这个问题?可能不需要 app_code 目录?

【问题讨论】:

    标签: .net web-services asmx


    【解决方案1】:

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

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

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

    除其他外,不会有 App_Code 文件夹。

    【讨论】:

    • +1 表示没有应用代码。自从 3.5 版本以来,真的没有心再看 WCF,因为普遍的共识是它的方式太复杂了(是的,它很烂)。当我再次感到勇敢时,我会检查 WCF 4。 - 这是 MS 对 WCF 3.x 的评价 - 直接来自马口: 现实情况是 WCF 配置通常成为当今实践中使用 WCF 最昂贵的领域,并且大部分复杂性都落在了没有准备好处理它的 IT/运营人员身上。
    • @JL:您一定将实体框架与 WCF 混淆了。版本 4 中没有重大变化 - 你没有修复如此接近完美的东西。如果您不需要复杂功能,它并不复杂。为自己创建一个“hello, world”服务并查看代码。不必费心查看每个配置属性 - 默认生成的配置包含不需要指定的默认值。
    • @JL:那句话的来源是什么?我还没有发现在现实生活中是这样的。
    • @JL 我相信这句话的来源是 msdn.microsoft.com/en-us/library/ee354381.aspx,这是一篇对比 WCF 与 WCF4 变得多么容易的文章,特别是在配置方面。
    【解决方案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 步,测试!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2014-09-11
      • 1970-01-01
      • 2014-12-23
      相关资源
      最近更新 更多