我正在为一个应用程序开发面向服务的架构,并希望服务既可以通过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)。考虑到我希望接口保持相同,这似乎是很多开销。