2011-10-21 146 views
2

我添加了一個WCF服務引用Silverlight應用程序和這裏是從web.config中,我有看起來像Silverlight和雙工WCF服務

<bindings> 
    <wsDualHttpBinding> 
    <binding name="wsDualHttpBinding"> 
     <security mode="None" /> 
    </binding> 
    </wsDualHttpBinding> 
    <pollingDuplexHttpBinding> 
    <binding name="multipleMessagesPerPollPollingDuplexHttpBinding" 
     duplexMode="MultipleMessagesPerPoll" /> 
    </pollingDuplexHttpBinding> 
</bindings> 

約束力和我有這樣的片段,以創建服務客戶端實例

var serviceClient = new DuplexCallerIdServiceClient(
     new PollingDuplexHttpBinding(PollingDuplexMode.MultipleMessagesPerPoll), 
     new EndpointAddress("http://localhost:51445/Service/MyService.svc")); 

我擔心的是爲什麼我必須在代碼中提供絕對網址。我有一個使用相同服務的winforms應用程序,我只需要執行new DuplexCallerIdServiceClient()即可創建一個看起來很理想的服務客戶端實例。有什麼辦法可以解決它嗎?我無法更改綁定設置。

謝謝

+1

您可以調用不帶參數的服務客戶端構造函數的原因是該地址是在app.config中指定的。如果你不喜歡這個網址是絕對的,你可以使用一個相對的網址,比如'../MyService.svc' – vorrtex

回答

0

您不必硬編碼服務URL。替換作爲參數傳入的硬編碼字符串或進行函數調用(或獲取某個對象的屬性)以使用有效的服務URL填充構造函數。

這裏還有許多的一種方式:

var serviceClient = new DuplexCallerIdServiceClient(
    new PollingDuplexHttpBinding(PollingDuplexMode.MultipleMessagesPerPoll), 
    new EndpointAddress(Info.Instance.ServiceURL)); 

如果信息是一個單獨的對象,實例都有單身的實例和的serviceUrl是來自......的地方的字符串屬性。數據庫,配置文件,硬編碼開始等...

P.S.小心Singleton模式,但作爲配置信息實體,它們可能非常有用。