我正在构建一个 Silverlight 应用程序,而我们希望能够让客户点击如下网址:
http://{client}.domain.com/
并登录,其中 {client} 部分是他们的公司名称。例如,谷歌的将是:
我想知道是否有人能够在 Silverlight 中使用此子域模型来决定对 Web 服务器的调用,以便您可以切换到特定数据库来运行查询?不幸的是,这对项目来说是非常必要的,因为我们正在努力让他们的员工更容易获得他们公司的软件特定信息。
我正在构建一个 Silverlight 应用程序,而我们希望能够让客户点击如下网址:
http://{client}.domain.com/
并登录,其中 {client} 部分是他们的公司名称。例如,谷歌的将是:
我想知道是否有人能够在 Silverlight 中使用此子域模型来决定对 Web 服务器的调用,以便您可以切换到特定数据库来运行查询?不幸的是,这对项目来说是非常必要的,因为我们正在努力让他们的员工更容易获得他们公司的软件特定信息。
在服务器端,您可以检查 HTTP 1.1 Host 标头以查看用户如何访问您的服务器并在此基础上进行必要的自定义。
我认为你不能单独使用 Silverlight 来做到这一点,我知道你不能在没有 Javascript、Ajax 等问题的情况下做到这一点。这是因为出于安全原因,浏览器对子域的处理方式与子页面不同。
以下想法如何:将重写规则插入您的 Web 服务器软件。因此,如果调用 http: //google.domain.com,Web服务器本身会将 URL 重写为类似http://www.domain.com/google/的内容(或者更好的是:http: //www.domain.com/客户/谷歌/)。那会有帮助吗?
乔治:
如果它是静态的,那将有所帮助,但唉,这将是动态的。我希望为应用程序进行 1x 部署,并使用http://google.domain.com/想法为用户切换到正确的数据库。我记得当我们建立一个 asp.net 网站时这样做过,使用域上下文来确定要使用什么皮肤等。
Ates:你能解释一下你在说什么吗……听起来你很接近我想要的东西。你看过这样的教程吗?
我想出的唯一另一种方法是拥有一个元数据库,当用户登录时,它会根据需要将它们切换到适当的数据库......只是在想告诉客户端 x 命中:
http://ClientX.domain.com/会比点击http://www.domain.com/并登录更甜蜜。似乎他们要打出自己的名字,并直接从登录屏幕向他们展示个性化的名字,这对客户群来说会更具吸引力。
@Richard B:不,我想不出我以前见过的任何此类教程。我会尽量详细一点。
更详细的服务器端方法:
Host
HTTP 标头(例如,某些平台中的“HTTP_HOST”服务器变量)。这将包含客户端用于访问您的服务器的确切 subdomain.example.com。提取子域部分并继续...也可以有一种仅限客户端的方法。我对 Silverlight 了解不多,但我假设您应该能够将 Silverlight 与 JavaScript 交互。您可以document.location
使用 JavaScript 读取数据并将其传递给您的 Silverlight 小程序,在该小程序中进一步的数据获取等逻辑将依赖于 JavaScript 传入的子域。
@Ates:
这就是我们在编写 ASP.Net 系统时所做的……我们将大量 *.example.com 主机推送到 Web 服务器,并使用 HTTP 标头进行处理。处理 WCF 在客户端和服务器之间推送信息时会出现阻塞......它只能存在于一个域中......
因此,例如,当您拥有 {client}.example.com 和 {sandbox}.example.com 时,WCF 服务无法同时注册到两者。它也不能只注册到 *.example.com 或 example.com,所以这就是 catch 22 的用武之地。其他一切我都有处理的先验知识。
我记得在某些情况下应用程序可以“欺骗”另一个域名的方法。我拿这种情况来说,我需要做这样的配置吗?很多研究,但我相信。
将服务放在特定的子域本身(例如 wcf.example.com)上,然后在服务上设置跨域策略文件以允许它访问它,这不是有效吗?
只要这可行,您就可以将 silverlight 加载到正确的子域中,然后将该子域传递给您的服务并让它完成它的工作。
下面的一些例子: