0

我们有一个 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 公开端点,因此 InstanceContextMode 将是 PerCall ,即使来自客户端的 evert 请求不需要它,它也会创建所有处理程序。

4

1 回答 1

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();
    }
}
于 2014-10-28T08:34:29.540 回答