2011-09-29 56 views
10

有沒有辦法在C#中用指定的端點地址創建WCF服務客戶端的實例,而不指定配置名稱?用指定的地址創建WCF服務客戶端,而不指定配置名稱

默認情況下,客戶有這些構造函數:

public ServiceClient() 
    public ServiceClient(string endpointConfigurationName) 
    public ServiceClient(string endpointConfigurationName, string remoteAddress) 

顯然,有一個默認的配置,因爲第一個構造函數。我想要的只是指定最終構造函數的第二個參數。現在,我正在努力通過閱讀使用ConfigurationManager的配置元素來弄清楚,但這看起來非常麻煩。有更清潔的方法嗎?

回答

1

那麼,你可以使用默認的構造函數,但是你必須手動編程所有的配置設置。通過指定配置名稱,服務客戶端將自動從.config文件中加載配置,所有您需要知道的是要使用哪種配置(您可以有多個,例如一個用於HTTP,另一個用於Net.Tcp)。 remoteAddress當然只是告訴WCF在哪裏建立連接。

如果您在自己配置客戶端設置時遇到問題,請確保您使用的是WCF服務配置工具。它適用於服務配置以及客戶端配置。

6

你生成的客戶端也應該有一個構造函數,看起來像這樣:

public ServiceClient(
    System.ServiceModel.Channels.Binding binding, 
    System.ServiceModel.EndpointAddress remoteAddress) 
     : base(binding, remoteAddress) { 
    } 

你可以稱它是沒有一個端點配置。

8

我更喜歡不使用.config文件中的端點配置。我常做這樣的事情:

 BasicHttpBinding basicbinding = new BasicHttpBinding(); 
     basicbinding.SendTimeout = TIMEOUT; 
     basicbinding.OpenTimeout = TIMEOUT; 
     ServiceClient client = new ServiceClient(basicbinding, new EndpointAddress(new Uri("http://xxxxx"))); 
+2

EndpointAddress類有一個構造函數,它直接使用uri字符串。沒有必要在那裏添加「新Uri」。 – Nyerguds

3

如果你想實際只是想調用一個服務,而無需知道一切有了解WCF服務和配置的處理,在C#中,你可以做.. 。

 String url = "http:\\somehost:someport\\pathToSomeService"; 

     EndpointAddress address = new EndpointAddress(url); 
     Binding binding = new BasicHttpBinding(); 

     YourClient client = new YourClient(binding, address); 

     // Call your client methods 
     client.SomeMethod(parm1, parm2); 

上面假設你產生一個服務引用,並且不需要配置信息的任何地方存在,而不是在生成的服務的參考,而不是在DLL而不是可執行文件。沒有配置。沒有。

我在一個真正的獨立服務代理DLL中使用上述。它是真正意義上的獨立單詞,因爲它完全可配置,不依賴於調用可執行文件來提供任何內容。

+0

這假定基本的http綁定,我不能假設。我最終從配置文件手動讀取服務客戶端部分,並以編程方式構建綁定。 – recursive

相關問題