Q:如何构建最基础的服务聚合模式?
Q: How to build the most basic service aggregation pattern?
我有一组服务希望能够通过一个端点访问。
现在我想在 wcf 中构建一些东西而不是使用现有的 framework/software 所以这是不可能的。
假设我有 10 个合同,每个合同代表一个我想要 "route" 的独立服务合同,我应该去哪个方向?
public partial class ServiceBus : ICardsService
{
//Proxy
CMSClient cards = new CMSClient();
public int methodExample()
{
return cards.methodExample();
}
到目前为止,我已经尝试使用部分 class "ServiceBus" 来实现每个合约,但后来我有多次(60 多次)相同的函数签名,所以我认为我应该换个角度思考。
有人知道我应该做什么吗?或者研究什么方向?目前我正在尝试使用一个普通的 wcf 服务,该服务将配置许多客户端点,指向它路由到的每个服务 - 以及一个供 'application' 使用的端点。
我是 wcf 的新手,所以任何看似微不足道的事情都请务必提及。
提前致谢。
I have a set of services I want to be able to access via one end point
altogether.
...
So far I've tried using a partial class "ServiceBus" that implements
each contract
这种 "service aggregation" 模式是否应该通过将多个端点压缩成一个超级外观端点来实现是值得怀疑的。即使实施得当,这仍然会导致您的解决方案中出现脆弱的单一故障点。
Suppose I have 10 contracts each representing a contract of an
indepedent service that I want to "route" to, what direction should I
go?
笼统地说,您的目标似乎是将调用者和服务分离,以便调用者进行调用,并根据调用上下文将调用路由到相关服务。
一种方法是在客户端执行此调用调解。这是一种不寻常的方法,但会涉及创建一个 "service bus" 程序集,其中包含基于某种可配置元数据在 运行 时间动态调用服务的能力。
客户端代码将在进程中使用程序集,并在 运行 时调用程序集,然后调用元数据存储,检索合同、绑定和地址信息针对相关服务,构建一个WCF通道,return发送给客户端。然后客户端可以愉快地对通道进行调用并在完成后处理它。
另一种方法是远程调用调解,幸运的是 WCF 确实为这种事情提供了 routing service。这允许您实现您提出的服务聚合模式,但以完全可配置的方式实现,因此您的整体解决方案将不那么脆弱。但是,除非您对路由器服务进行负载平衡,否则您仍然会有一个故障点。
I'm not sure about making it client side as I can't access some of the
applications (external apis) that are connecting to our service
好吧,您选择的任何解决方案都可能涉及一些消费者重写 - 这几乎是不可避免的。
I need to make it simple for the programmers using our api
这不排除客户端库方法。事实上,在某些方面,这对开发人员来说真的很容易,他们需要做的就是获取一个 nuget 包,连接它并开始调用它。但是,我同意这是一种不寻常的方法,并且还会为您带来大量工作。
I want to implement the aggregation service with one endpoint for a
few contracts
然后您需要找到一种方法来避免必须在单个服务实现中实现多个重复(或冗余)服务操作。
最简单的方法可能是定义一个全新的服务契约,它只公开那些与每个服务不同的操作,另外还有每个冗余操作的单个实例。然后,您将需要一些内部路由逻辑来根据调用者想要执行的操作来调用支持服务操作。转念一想,我觉得没那么简单。
您有任何不同服务操作和冗余服务操作的示例吗?
我有一组服务希望能够通过一个端点访问。
现在我想在 wcf 中构建一些东西而不是使用现有的 framework/software 所以这是不可能的。
假设我有 10 个合同,每个合同代表一个我想要 "route" 的独立服务合同,我应该去哪个方向?
public partial class ServiceBus : ICardsService
{
//Proxy
CMSClient cards = new CMSClient();
public int methodExample()
{
return cards.methodExample();
}
到目前为止,我已经尝试使用部分 class "ServiceBus" 来实现每个合约,但后来我有多次(60 多次)相同的函数签名,所以我认为我应该换个角度思考。
有人知道我应该做什么吗?或者研究什么方向?目前我正在尝试使用一个普通的 wcf 服务,该服务将配置许多客户端点,指向它路由到的每个服务 - 以及一个供 'application' 使用的端点。
我是 wcf 的新手,所以任何看似微不足道的事情都请务必提及。
提前致谢。
I have a set of services I want to be able to access via one end point altogether. ... So far I've tried using a partial class "ServiceBus" that implements each contract
这种 "service aggregation" 模式是否应该通过将多个端点压缩成一个超级外观端点来实现是值得怀疑的。即使实施得当,这仍然会导致您的解决方案中出现脆弱的单一故障点。
Suppose I have 10 contracts each representing a contract of an indepedent service that I want to "route" to, what direction should I go?
笼统地说,您的目标似乎是将调用者和服务分离,以便调用者进行调用,并根据调用上下文将调用路由到相关服务。
一种方法是在客户端执行此调用调解。这是一种不寻常的方法,但会涉及创建一个 "service bus" 程序集,其中包含基于某种可配置元数据在 运行 时间动态调用服务的能力。
客户端代码将在进程中使用程序集,并在 运行 时调用程序集,然后调用元数据存储,检索合同、绑定和地址信息针对相关服务,构建一个WCF通道,return发送给客户端。然后客户端可以愉快地对通道进行调用并在完成后处理它。
另一种方法是远程调用调解,幸运的是 WCF 确实为这种事情提供了 routing service。这允许您实现您提出的服务聚合模式,但以完全可配置的方式实现,因此您的整体解决方案将不那么脆弱。但是,除非您对路由器服务进行负载平衡,否则您仍然会有一个故障点。
I'm not sure about making it client side as I can't access some of the applications (external apis) that are connecting to our service
好吧,您选择的任何解决方案都可能涉及一些消费者重写 - 这几乎是不可避免的。
I need to make it simple for the programmers using our api
这不排除客户端库方法。事实上,在某些方面,这对开发人员来说真的很容易,他们需要做的就是获取一个 nuget 包,连接它并开始调用它。但是,我同意这是一种不寻常的方法,并且还会为您带来大量工作。
I want to implement the aggregation service with one endpoint for a few contracts
然后您需要找到一种方法来避免必须在单个服务实现中实现多个重复(或冗余)服务操作。
最简单的方法可能是定义一个全新的服务契约,它只公开那些与每个服务不同的操作,另外还有每个冗余操作的单个实例。然后,您将需要一些内部路由逻辑来根据调用者想要执行的操作来调用支持服务操作。转念一想,我觉得没那么简单。
您有任何不同服务操作和冗余服务操作的示例吗?