使用子域来标识客户端

时间:2008-10-01 21:10:13

标签: silverlight web-services subdomain

我正在构建一个Silverlight应用程序,而我们希望能够让客户端点击一个网址:

的http:// {客户} .domain.com /

并登录,其中{client}部分是其商家名称。例如,谷歌将是:

http://google.domain.com/

我想知道的是,如果有人能够在Silverlight中能够使用此子域模型来决定对Web服务器的调用,以便您可以切换到特定数据库来运行查询?不幸的是,这对项目来说非常必要,因为我们正在努力让员工轻松获取公司特定的软件信息。

6 个答案:

答案 0 :(得分:0)

在服务器端,您可以检查HTTP 1.1主机标头,以查看用户如何访问您的服务器并根据该标准进行必要的自定义。

答案 1 :(得分:0)

我认为你不能单独使用Silverlight,我知道你不能没有Javascript,Ajax等问题。这是因为出于安全原因,子域是由浏览器处理的子页面以外的。

以下想法如何:在网络服务器软件中插入重写规则。因此,如果调用http://google.domain.com,则Web服务器本身会将URL重写为http://www.domain.com/google/(或更好:http://www.domain.com/customers/google/)。那会有帮助吗?

答案 2 :(得分:0)

的Georgi:

如果它是静态的,那将有所帮助,但唉,这将是动态的。我希望对应用程序进行1x部署,并使用http://google.domain.com/想法切换到用户的正确数据库。我记得当我们构建一个asp.net网站时,使用域上下文来确定要使用的皮肤等等。

Ates:你能解释一下你所说的话吗......听起来你已经接近我想要的了。你有没有看过这样的教程?

我想出这个工作的唯一另一种方法是使用一个元数据库,当用户登录时,它会根据需要将它们切换到相应的数据库...只是想到告诉客户端x点击:

http://ClientX.domain.com/比说http://www.domain.com/并登录更甜美。看起来好像他们打了他们的名字,并且从登录屏幕直接向他们展示它对客户群来说更具吸引力。

答案 3 :(得分:0)

@Richard B:不,我想不出以前见过的任何这样的教程。我会试着更加冗长。

更详细的服务器端方法:

  1. 将* .example.com指向DNS设置中的相同IP。
  2. 处理登录的后端应用程序检查Host HTTP标头(例如某些平台中的“HTTP_HOST”服务器变量)。这将包含客户端用于到达您的服务器的确切subdomain.example.com。提取子域部分并继续...
  3. 还可以采用仅限客户端的方法。我对Silverlight了解不多,但我假设你应该能够将Silverlight与JavaScript连接起来。您可以使用JavaScript阅读document.location并将其传递给您的Silverlight小程序,其中进一步的数据提取等逻辑将依赖于JavaScript传入的子域。

答案 4 :(得分:0)

@Ates:

这就是我们编写ASP.Net系统时所做的...我们在网络服务器上推送了大量* .example.com主机,并使用HTTP标头进行处理。在处理WCF推送客户端和服务器之间的信息时会出现阻碍......它只能存在于一个域中......

因此,例如,当您拥有{client} .example.com和{sandbox} .example.com时,无法向两者注册WCF服务。它也不能只注册到* .example.com或example.com,因此这就是catch 22进入的地方。其他一切我都有先前的处理知识。

我记得一种方法,通过该方法,应用程序可以在某些情况下“欺骗”另一个域名。我在这种情况下接受它,我需要做这样的配置吗?我还相信很多研究。

答案 5 :(得分:0)

将服务放在特定的子域本身(例如wcf.example.com)上,然后在服务上设置跨域策略文件以允许它访问它是不是很有效?

只要这样做就可以了,你可以将Silverlight加载到正确的子域中,然后将该子域传递给你的服务并让它做它的事情。

下面的一些例子: