【问题标题】:Are ASMX Web Service Enable Session and ResponseFormat Required是否需要 ASMX Web 服务启用会话和响应格式
【发布时间】:2013-07-02 13:59:30
【问题描述】:

有人要求我更改旧的 .asmx 网络服务,有一些问题我希望得到一些指导。

网络方法是这样装饰的:

  [WebMethod(EnableSession = true), ScriptMethod(ResponseFormat = ResponseFormat.Json)]

在我的特定方法中,我从数据库返回数据,我使用 JSON 作为对象列表返回。

我注意到 JSON 仍然返回,但没有:ScriptMethod(ResponseFormat = ResponseFormat.Json 部分。

在这种情况下:

  • 我可以从这里安全地删除它吗?

  • 如果它仍然有效,这是否意味着它可能会在基类或配置文件的其他位置进行配置?

  • (EnableSession = true)的用途是什么,如果服务不更新数据且读取的数据很少更改,是否需要它?

对于基本的相当模糊的问题,我很抱歉,但我以前没有使用过 .asmx Web 服务。有人能指出我正确的方向吗?

谢谢

【问题讨论】:

    标签: asp.net json web-services


    【解决方案1】:

    @Karl 已经说过,如果您需要在 webmethod 中访问 Session,则必须使用所述属性来装饰您的方法。

    现在我看到人们在 SO 和 Asp.net 官方论坛上抱怨 webmethod 没有返回 JSON 响应,即使他们已经用

    装饰了他们的方法
    ScriptMethod(ResponseFormat = ResponseFormat.Json)
    

    因为他们可能在 web.config 中缺少配置。

    我建议您阅读 Dave Ward 的以下文章,这些文章可能会帮助您了解使用 ASMX 返回 JSON 响应需要做什么:

    ASMX and JSON – Common mistakes and misconceptions

    ASMX ScriptService mistake: Installation and configuration

    【讨论】:

      【解决方案2】:

      EnableSession = true 允许您访问Session 集合,它是HttpContext.Current.Session 的一部分。如果您的 Web 方法中的代码不使用 Session 集合,那么可以安全删除,但如果它确实使用了 Session 集合,那么删除此属性将导致您的 Web 服务逻辑抛出异常,因为它无法访问Session 集合。

      ScriptMethod(ResponseFormat = ResponseFormat.Json) 明确定义此 Web 方法将返回 JSON,但由于 JSON 是默认返回类型,因此删除它并不重要。所以简短的回答是,是的,可以删除它,但把它留在那里也无妨(事实上,我认为这样做更好,因为它明确声明这个东西正在返回JSON 数据)。

      【讨论】:

      • 谢谢。原谅我,为什么 JSON 是默认的返回类型?它是“开箱即用”还是在其他地方配置?
      • 开箱即用,通过属性完成配置。例如,如果您的 Web 服务方法使用 XmlDocument 对象,那么您可能希望将响应格式更改为 XML,如下所示:ScriptMethod(ResponseFormat = ResponseFormat.Xml)
      猜你喜欢
      • 2013-02-02
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2017-05-17
      • 2014-01-19
      • 2020-07-27
      • 2013-10-24
      相关资源
      最近更新 更多