【发布时间】:2016-03-28 20:08:00
【问题描述】:
背景
我有一个无法修改的现有服务合同。服务的实现是我支持并且可以更改的代码。
目前该服务支持单租户,并托管该服务的多个实例,例如http://foo-tenant1.com/service.svc和http://foo-tenant2.com/service.svc
现在我想更改服务以通过单一服务支持多个租户。例如,服务托管在地址:http://foo.com/service.svc,并通过在地址中添加租户 id 来支持多租户;
例如:
如果 WCF 能够以某种方式支持通配符路由:
http://foo.com/tenant1/service.svc 和 http://foo.com/tenant2/service.svc 等...
或者如果它能够以某种方式支持查询字符串:
http://foo.com/service.svc?tenant1 和 http://foo.com/service.svc?tenant2 等...
或其他方式...
这样做的原因是调用它的客户端不会有任何租户的概念。从客户的角度来看,每个租户只有一个 Url。
问题
如何使用这样的“包罗万象”端点托管 WCF 服务?或者我可以通过路由或 url 重写来做到这一点吗?然后我可以将租户 ID 放入请求标头中,并修改服务代码以支持多租户。
然后我可以更改服务代码以从请求标头中读取并支持租户 ID。
【问题讨论】:
-
当你说你不能修改Service Contract,是不是意味着你没有访问代码的权限?
-
此外,foo.com/tenant/service.svc 和 foo.com/tenant1/service.svc 表示两种不同的 WCF 服务,无法通过一种服务实现。我认为您想参考 WCF REST 服务,您可以在其中进行操作......foo.com/Service.svc/tenant 和 foo.com/Service.svc/tenant1
-
@HarmeetBhamra 我可以修改服务代码,但不能修改合同,因为我无法修改客户端
-
@EdmundYeung99 - 如果您可以修改服务代码,您将拥有更多的灵活性。您可以修改现有服务合同并添加新方法——这对现有客户来说是一项非破坏性更改。只要现有客户期望的方法不改变,您可以在实际实现中做任何您想做的事情。
-
@Tim 我无法修改客户端,它们只能调用现有方法,因此无法创建新方法,因为没有客户端可以调用这些方法
标签: web-services wcf