【问题标题】:Singleton WebService (ASMX, not WCF)单例 Web 服务(ASMX,不是 WCF)
【发布时间】:2013-06-21 11:54:21
【问题描述】:

有没有办法将 C# ASMX WebService 定义为单例?也许在 Web.config 文件中?目前我没有使用 WCF。

提前致谢

    [WebService(Namespace = "http://www.mydomain.eu/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class MyService : System.Web.Services.WebService
    {
        ...
    }

【问题讨论】:

  • 这样做你想达到什么目的?

标签: c# web-services asmx


【解决方案1】:

您可以将 Web 服务隐藏在单例外观的后面:

public static class ServiceFacade
{
    public static void ServiceOperation()
    {
        using (var service = new MyService())
        {
            service.Operation();
        }
    }
}

【讨论】:

  • 但是服务器端(服务)的 AppDomain 是在每个客户端请求时创建/销毁的。因此,即使是静态对象也没有效果。还是?
  • 这是不正确的。客户端不控制服务的 AppDomain 的创建和销毁。这取决于服务器上的主机环境。 Web 服务通常由 IIS 托管,并且 IIS 通常会在很长一段时间内拥有一个 AppDomain(因为创建 AppDomain 的成本非常高)。您可以在 IIS 中进行配置。
  • 感谢您的提示。我会检查是否可以相应地配置 VisualStudio 的开发服务器。
【解决方案2】:

您无法创建Singleton Web 服务,因为 Web 服务在 IIS 上运行并被视为 Web 应用程序并按此方式进行维护。每个客户端将共享单个应用程序实例,但每个客户端都有自己的请求、响应、会话等。

【讨论】:

    【解决方案3】:

    您始终可以将主数据对象设为静态,并将通过所有工作实例共享。

    【讨论】:

    • 但是服务器端(服务)的 AppDomain 是在每个客户端请求时创建/销毁的。因此,即使是静态对象也没有效果。还是?
    • 我认为有可能在 IIS 中配置行为,但老实说我不记得了。为什么还要使用 asmx 来支持 WCF?
    • 我对 ASMX 比较熟悉,但我想我现在会切换到 WCF。无论如何,它更灵活。
    • 我在用 WCF 替换旧的 Asmx 服务时遇到了一些不兼容问题。主要是用其他编程语言实现并且可能是硬编码的 asmx 客户端。除此之外,这是一件轻而易举的事。
    猜你喜欢
    • 2011-02-19
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2012-04-17
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多