我的团队正在使用3层架构和WCF构建我们的第一个重要的Silverlight应用程序。到目前为止,我们已经在中间层开发了大约10个单独的WCF服务,而且这个数字只会增长。
通常,表示层(即Silverlight应用程序)指向我们的开发服务器上托管的服务。但是,有时我希望它从localhost访问服务 - 即。开发者机器。
是否有一种简单的方法可以更改表示层寻找服务的位置?有没有办法在这里轻松切换选项?
答案 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控件。获得目标地址后,您就可以按照上面链接中的说明以编程方式构建端点。