代码之家  ›  专栏  ›  技术社区  ›  Richard B

使用子域标识客户端

  •  0
  • Richard B  · 技术社区  · 16 年前

    我正在构建一个Silverlight应用程序,而我们希望能够让客户机点击一个URL,比如:

    http:/客户端.domain.com/

    以及登录,其中客户机部分是其业务名称。例如,谷歌将:

    http://google.domain.com/

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

    6 回复  |  直到 16 年前
        1
  •  0
  •   Bryant    16 年前

    把服务放在一个特定的子域上,比如wcf.example.com,然后在服务上设置一个跨域策略文件,允许它访问它,这难道不管用吗?

    只要这样做可行,您就可以将Silverlight加载到适当的子域中,然后将该子域传递给您的服务,并让它执行它的操作。

    下面是一些例子:

        2
  •  0
  •   Ates Goral    16 年前

    在服务器端,您可以检查HTTP1.1主机头,以查看用户是如何访问您的服务器的,并基于此进行必要的自定义。

        3
  •  0
  •   Georgi    16 年前

    我认为你不能单独使用Silverlight来完成这项工作,我知道你不能在不使用JavaScript、Ajax等的情况下完成这项工作。这是因为子域(出于安全原因)不是由浏览器处理的子页。

    下面的想法怎么样:在Web服务器软件中插入重写规则。所以如果 http://google.domain.com 被调用时,Web服务器本身将URL重写为 http://www.domain.com/google/ (或更好: http://www.domain.com/customers/google/ )这样有帮助吗?

        4
  •  0
  •   Richard B    16 年前

    Georgi:

    如果它是静态的,这会有所帮助,但遗憾的是,它将是动态的。我希望对应用程序进行1X部署,并使用 http://google.domain.com/ 为用户切换到正确的数据库的想法。我记得当我们构建了一个ASP.NET网站,使用域上下文来确定要使用的皮肤等时,曾经这样做过一次。

    阿提斯:你能详细解释一下你在说什么吗?听起来你和我想说的很接近。你看过这样的教程吗?

    我唯一能做这项工作的方法是有一个元数据库,当用户登录时,它会根据需要将他们切换到适当的数据库…只是想告诉客户X打:

    http://ClientX.domain.com/ 会比说打更甜 http://www.domain.com/ 并登录。似乎他们要点击自己的名字,并在登录屏幕上为他们显示个性化的名字对客户群来说更具吸引力。

        5
  •  0
  •   Ates Goral    16 年前

    @理查德B:不,我想不出我以前看过的任何这样的教程。我会尽量详细一点。

    服务器端方法更详细:

    1. 将*.example.com定向到DNS设置中的同一IP。
    2. 处理登录的后端应用程序检查 Host HTTP头(例如,某些平台中的“http_host”服务器变量)。它将包含客户端用于访问服务器的确切子域.example.com。提取子域部分并继续…

    也可以有客户端专用的方法。我对Silverlight不太了解,但我假设您应该能够将Silverlight与JavaScript交互。你可以阅读 document.location 使用javascript并将其传递给您的Silverlight小程序,然后进一步获取数据等。逻辑将依赖于javascript传递的子域。

        6
  •  0
  •   Richard B    16 年前

    @ Ates:

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

    因此,例如,当您拥有client.example.com和sandbox.example.com时,WCF服务不能同时注册到这两者。它也不能只注册到*.example.com或example.com,所以catch 22就在这里出现。我以前对处理的所有知识。

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