WCF包装客户端(包装服务方法调用的静态方法)

本文关键字:包装 静态方法 调用 服务 客户端 WCF 方法 | 更新日期: 2023-09-27 17:54:00

可能重复:
WCF包装代理客户端

我的项目中的服务中有许多使用客户端应用程序的web方法。

我不想写这样的代码:

 using(ServiceClient sc = new ServiceClient())
    {
         //Invoke service methods        
         sc.Method1();
    }

相反,我想写:ServiceClient.Method1((;(例如(-在这种情况下,所有引用代理的常见操作(初始化、调用方法、处理、异常处理(都将在ServiceClient内部。当然,我可以用类似的代码包装我的任何web方法,或者使用反射按名称检索方法,但可能还有其他方法吗?

WCF包装客户端(包装服务方法调用的静态方法)

像这样的静态方法怎么样:

public static TResult Execute<TResult>(Func<ServiceClient, TResult> proxy)
{
    using (var client = new ServiceClient())
    {
        return proxy(client);
    }
}

然后:

string result1 = Execute(proxy => proxy.Method1());
int result2 = Execute(proxy => proxy.Method2("some param", 123));

如果愿意,可以编写一个Singleton实现,它封装所有客户端操作并在内部维护初始化的客户端。

然后将所需的方法公开为singleton类的静态成员。这还有加速服务通信的额外好处,因为大多数过载都是创建代理(契约加载、绑定初始化和客户端设置(。