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

时间:2014-10-28 06:31:47

标签: wcf instancecontextmode

我们有一个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()方法时,只应处理初始化处理程序_handler2。实现这一目标的最佳方法是什么?

由于服务是使用BasicHttpbinding公开端点而不支持Sessions InstanceContextMode将是PerCall,即使客户端的evert请求不需要,也会创建所有处理程序。

1 个答案:

答案 0 :(得分:0)

也许我误解了一些东西,但为什么不用他们需要的方法创建处理程序呢?然后你的实现看起来像这样:

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();
    }
}