我正在为应用程序开发面向服务的体系结构,我希望通过WCF提供的服务既可以通过简单的库也可以使用。理想情况下,我想减少重复的代码。不使用WCF调用WCF服务 - 好的或不好的做法?
概念上,这映射到:
客户=> WCF服务=>服务库(实际实现)
或
客户=>服务库(实际实现)
基于在客户端所在的位置(本地或远程)。
这里有一个简单的例子:
[ServiceContract]
public interface ICalculator
{
[OperationContract]
int Add(int a, int b);
}
public class Calculator : ICalculator
{
public int Add(int a, int b)
{
return a + b;
}
}
public class CalculatorFactory
{
public static ICalculator CreateCalculator()
{
return new Calculator();
}
}
我的客户端应用程序依赖于它是本地或远程做了以下
int result = CalculatorFactory.CreateCalculator().Add(1,2);
或
int result = IChannelFactory<ICalculator>().CreateChannel().Add(1,2);
。
直接调用WCF注释代码(即不使用WCF)是一种糟糕的做法吗?
附加注释:
- 我意识到,我可以在任何情况下使用WCF和只是主机使用了NamedPipes本地连接服务。为了简单起见,我想避免这种情况。
- 上述的替代方案基本上重复了服务库中的ICalculator接口,并将WCF服务实现更改为包含CalculatorFactory.CreateCalculator()。Add(1,2)。这看起来像是一个很大的开销,因为我希望接口是相同的。
是不是第二个资源泄漏,因为代理需要关闭? – alternative 2011-04-23 19:01:33
这与问题并不完全相关 - 以上仅仅是示例代码在我的大脑中发出的咔嗒声。这个问题更概念化。 – Travis 2011-04-23 19:23:24