我的團隊使用3層架構和WCF構建我們的第一個重要的Silverlight應用程序。到目前爲止,我們已經在中間層開發了大約10個獨立的WCF服務,而且這個數字只會增長。WCF Silverlight應用程序中的多個服務地址配置
通常,表示層(即Silverlight應用程序)指向託管在我們的開發服務器上的服務。但是,有時我希望它從本地主機訪問服務 - 即。開發者機器。
是否有一種簡單的方法來更改表示層查找服務的位置?在這裏可以輕鬆切換選項嗎?
我的團隊使用3層架構和WCF構建我們的第一個重要的Silverlight應用程序。到目前爲止,我們已經在中間層開發了大約10個獨立的WCF服務,而且這個數字只會增長。WCF Silverlight應用程序中的多個服務地址配置
通常,表示層(即Silverlight應用程序)指向託管在我們的開發服務器上的服務。但是,有時我希望它從本地主機訪問服務 - 即。開發者機器。
是否有一種簡單的方法來更改表示層查找服務的位置?在這裏可以輕鬆切換選項嗎?
比更新客戶端配置文件更簡單?
你可能會考慮做的是將你的客戶端配置在一個單獨的文件中,並創建一個用於「正常」使用,另一個用於「開發機器」使用。
在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>
節點。
我遵循的方法是,如果在ServiceReferences.ClientConfig文件中指定了一個地址,那麼它將被使用,否則我會根據主機地址和主機Web應用程序as detailed here中的已知位置重建目標端點。
另一種方法是在您的web應用程序的web.config中設置目標端點url,然後將這些配置設置作爲initParams
的一部分傳遞給silverlight控件。一旦你有了目標地址,你就可以像上面鏈接中提到的那樣以編程方式構建終點。
非常好的主意。 – 2010-04-01 12:17:44