2010-04-01 54 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控件。一旦你有了目標地址,你就可以像上面鏈接中提到的那樣以編程方式構建終點。

相關問題