我有很多已经实施的企业服务,并且我将它们公开为WCF的服务。WCF为专家避免太多端点
我不喜欢这个主意,有一个端点到每个服务.....它可能是在未来保持我的资料库增长问题.......
I' d想知道wcf的专家意见,如果下面的代码是一个好方法,那么我可以继续使用这个解决方案。
业务服务答:
[ServiceContract]
public interface IServiceA
{
[OperationContract]
object AddA(object a);
[OperationContract]
object Update();
}
业务服务B:
[ServiceContract]
public interface IServiceB
{
[OperationContract]
object AddB(object b);
[OperationContract]
object Update();
}
具体实施服务A
public class ConcreteServiceA : IServiceA
{
public object AddA(object a)
{
Console.WriteLine("ConcreateServiceA::AddA");
return null;
}
public object Update()
{
Console.WriteLine("ConcreateServiceA::Update");
return null;
}
}
混凝土实施服务B
public class ConcreteServiceB : IServiceB
{
public object AddB(object b)
{
Console.WriteLine("ConcreateServiceB::AddB");
return null;
}
public object Update()
{
Console.WriteLine("ConcreateServiceB::Update");
return null;
}
}
我的单一服务是局部,分离成每个服务的关注。 注意it's构造取决于商务服务上面,将使用IoC的
部分的构造
public partial class WCFService
{
IServiceA _a;
IServiceB _b;
public WCFService()
: this(new ConcreteServiceA(), new ConcreteServiceB())
{
}
public WCFService(IServiceA serviceA, IServiceB serviceB)
{
_a = serviceA;
_b = serviceB;
}
}
部分类只实现IServiveA
public partial class WCFService : IServiceA
{
object IServiceB.AddB(object b)
{
return _b.AddB(b);
}
object IServiceB.Update()
{
return _b.Update();
}
}
注射部分课程只实施IServiceB
public partial class WCFService : IServiceB
{
object IServiceA.AddA(object a)
{
return _a.AddA(a);
}
object IServiceA.Update()
{
return _a.Update();
}
}
而在客户端,我用这样的:
var endPoint = new EndpointAddress("http://localhost/teste");
ChannelFactory<IServiceA> _factoryA = new ChannelFactory<IServiceA>(new BasicHttpBinding(), endPoint);
IServiceA serviceA = _factoryA.CreateChannel();
serviceA.Update();
var netTcpEndPoint = new EndpointAddress("net.tcp://localhost:9000/teste");
ChannelFactory<IServiceB> _factoryB = new ChannelFactory<IServiceB>(new NetTcpBinding(), netTcpEndPoint);
IServiceB serviceB = _factoryB.CreateChannel();
serviceB.Update();
我真的很感激任何意见或其他建议。
你说的'想粗粒度不细粒度'是对的,我会为每个服务工作一个端点。关于您的请求/响应类的建议非常好,可以通过WCF使用泛型和委托?例如:service.Request((x,y)=> x.Add(y)) –
will
我不明白为什么不。只需按照请求/响应模式进行操作,就可以减少维护次数。 –