2012-10-01 79 views
0

我們可以在不使用Visual Studio中的添加引用的情況下動態地向項目添加服務引用。 Wsdl元數據導入是否有助於實現這一目標,有些人可以幫助我動態加載和附加服務項目並在wcf中使用客戶端,或者爲我提供一種實現這一目的的方法。動態添加服務引用

回答

0

.NET框架有一個名爲System.ServiceModel.Discovery的專用名稱空間。從高層次,您可以使用可以找到可供使用的服務的DiscoveryClient

爲了能夠通過DiscoveryClient找到服務,服務信息需要通過AnnouncementClient類發送出去。該類允許服務發佈公告消息。從文檔:

聲明消息包含有關該服務的信息,例如其完全合格的合同名稱,該服務運行的任何範圍以及該服務想要發送的任何自定義元數據。

這些類應該是您爲動態服務發現和使用提供管道所需的一切。

0

如果您嘗試使用現有的第三方端點(不受您控制的服務),則.NET框架中至少提供了兩種方法。

  1. MetadataExchangeClient
  2. MetadataResolver

MetadataExchangeClient將連接到一個MEX/WSDL端點,並返回表示服務元數據對象的集合。

如果您將MEX/wsdl端點和要解析的類型傳遞給MetadataResolver,MetadataResolver將返回已知服務的配置。這使您可以導入連接設置,而無需事先指定。

要查看還有什麼可用的,請探索System.ServiceModel.Description名稱空間。它具有上述兩個類別以及與動態服務解析相關的其他類別。

編輯:這是能夠檢索元數據對我來說:

MetadataExchangeClient client = new MetadataExchangeClient(
    new Uri("http://localhost:22948/Service1.svc?wsdl"), 
    MetadataExchangeClientMode.HttpGet); 
var response = client.GetMetadata(); 
+0

嗨菲爾我已經試過它使用的服務描述類此資源聯機,但我有一個錯誤,當我與進口商對象導入它說缺少參數名稱由於某種原因鏈接是[鏈接](http://blogs.msdn.com/b/dhrubach/archive/2008/10/20/8623711.aspx) – Hunter

+0

我會看看如果我能得到一個小例子工作今晚,如果我這樣做,我會把它放在GitHub上。 –

+0

HI Phil我發現模式計數爲零,即使wsdl文件包含6個使用上述示例的模式 – Hunter