WCF Silverlight应用程序中的多服务地址配置

时间:2010-04-01 05:50:06

标签: .net wcf silverlight

我的团队正在使用3层架构和WCF构建我们的第一个重要的Silverlight应用程序。到目前为止,我们已经在中间层开发了大约10个单独的WCF服务,而且这个数字只会增长。

通常,表示层(即Silverlight应用程序)指向我们的开发服务器上托管的服务。但是,有时我希望它从localhost访问服务 - 即。开发者机器。

是否有一种简单的方法可以更改表示层寻找服务的位置?有没有办法在这里轻松切换选项?

2 个答案:

答案 0 :(得分:2)

比更新客户端配置文件更容易吗?

您可能会考虑将客户端配置放在单独的文件中,并创建一个用于“正常”使用,另一个用于“开发机器”。

然后在您的WCF配置中,使用外部化配置文件:

<system.serviceModel>
  <client configSource="client.normal.config" />
</system.serviceModel>

如果您需要切换到“开发机器”使用,请使用

<system.serviceModel>
  <client configSource="client.localhost.config" />
</system.serviceModel>

这两个外化配置文件看起来像这样:

[client.normal.config]

<?xml version="1.0" encoding="utf-8" ?>
<client>
    <endpoint name="...." address="http://YourServer/Service1" ...... />
    <endpoint name="...." address="http://YourServer/Service2" ...... />
    ....
    <endpoint name="...." address="http://YourServer/ServiceX" ...... />
</client>

[client.localhost.config]

<?xml version="1.0" encoding="utf-8" ?>
<client>
    <endpoint name="...." address="http://localhost/Service1" ...... />
    <endpoint name="...." address="http://localhost/Service2" ...... />
    ....
    <endpoint name="...." address="http://localhost/ServiceX" ...... />
</client>

这样,您可以为正常使用创建一次配置文件,为localhost使用创建一次 - 您可以轻松地在两者之间切换基本配置。

这不是WCF特有的功能 - 它是.NET配置功能。 任何配置部分(但不包括配置部分组)都可以外部化为单独的* .config文件。您可以将WCF配置的其他部分放入外部配置文件中(但是您不能将整个<system.serviceModel>节点外部化,因为这是配置节组 - 而不是配置节)。

答案 1 :(得分:1)

我遵循一种方法,即如果在ServiceReferences.ClientConfig文件中指定了地址,则使用它,否则我将根据主机的地址和托管Web应用程序中的已知位置重建目标端点{{3 }}

另一种方法是在您的网络应用的web.config中设置目标终点网址,然后将这些配置设置作为其initParams的一部分传递给silverlight控件。获得目标地址后,您就可以按照上面链接中的说明以编程方式构建端点。