我们有一个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();
}
}