如何避免不必要的对象初始化WCF



我们有一个WCF服务,它使用BasicHttpBinding公开了几个操作,服务实现与类似

Public Class MyService
{
  private IHandler1 _handler1 = GetHandler1();
  private IHandler2 _handler1 = GetHandler12();
  private IHandler3 _handler1 = GetHandler3();

Public Void HandleMessage(string msg)
{
  _handler1.SomeMethod();
}

Public Void HandleMessage(string msg)
{
  _handler1.SomeMethod();
}
Public Void HandleMessage2(string msg)
{
  _handler2.SomeMethod();
}
Public Void HandleMessage2(string msg)
{
  _handler3.SomeMethod();
}

}

但我在这段代码中看到的问题是,所有的处理程序都在初始化,即handler1/2/3即使当我们收到处理其中一条消息的请求时,我的意思是当客户端调用HandleMmessage2()方法时,也只应初始化handler_handler2。实现这一目标的最佳方式是什么。?

由于服务使用不支持会话的BasicHttpbinding公开端点,InstanceContextMode将是PerCall,它将创建所有处理程序,即使来自客户端的每个请求都不需要。

也许我误解了什么,但为什么不在所需的方法中创建处理程序呢?那么你的实现会是这样的:

public class MyService
{
    public void HandleMessage(string msg)
    {
        IHandler1 _handler = GetHandler1();   
        _handler.SomeMethod();
    }
    public void HandleMessage2(string msg)
    {
        IHandler2 _handler = GetHandler();
        _handler.SomeMethod();
    }
    public void HandleMessage3(string msg)
    {
        IHandler3 _handler = GetHandler3();
        _handler.SomeMethod();
    }
}

相关内容

  • 没有找到相关文章

最新更新