我们有一个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请求不需要,也会创建所有处理程序。
答案 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();
}
}