2010-04-01 84 views
1

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

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

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

回答

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> 

这样一来,您创建配置文件,一旦正常使用,一旦本地主机使用 - 你可以很容易地在之间的基础配置切换二。

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

+0

非常好的主意。 – 2010-04-01 12:17:44

1

我遵循的方法是,如果在ServiceReferences.ClientConfig文件中指定了一个地址,那么它将被使用,否则我会根据主机地址和主机Web应用程序as detailed here中的已知位置重建目标端点。

另一种方法是在您的web应用程序的web.config中设置目标端点url,然后将这些配置设置作为initParams的一部分传递给silverlight控件。一旦你有了目标地址,你就可以像上面链接中提到的那样以编程方式构建终点。

相关问题