2011-07-13 62 views
16

我有一個MVC解決方案,它爲Web API服務提供了幾條路徑。在某些情況下,我會用一個簡單的HTTP獲取從JavaScript調用這些。在其他情況下,我想從一些.NET代碼中調用它們,也許是另一個MVC應用程序。添加對ASP.NET Web API服務的服務引用

有沒有辦法添加一個服務引用這些Web API端點,並有工具創建代理客戶端和CLR類型,因爲它會與典型的WCF服務嗎?我知道這裏沒有涉及到的SOAP,但我確實已經讀過它是可能的,而不是如何。

回答

15

不,它是REST服務。 REST服務不公開用於通過服務引用創建代理的元數據(WCF數據服務除具有某種特殊形式的元數據外)。使用Web-API的HttpClient類來調用服務。

+0

感謝您的答覆。所以沒有像這樣暴露的元數據模式,但是您認爲可以從響應中派生出很像xsd在XML中的作用。添加服務引用需要派生某種模式,在此基礎上構建一個clr類,然後客戶端將本質上反序列化爲這個集合。這是工具可能實際上支持給予在設計時使用這種類型的服務的靈活性 –

+0

這是一個非常蹩腳的藉口。這裏的(典型)場景是,您正在調用您自己的服務 - 並且您始終擁有用於您自己的服務的元數據。這只是一個劣質工具問題。如果您需要OData,事情會變得更糟:那麼您需要編寫自己的linq提供程序,以獲得舊WCF服務的表現力。更好的工具可以改變這一點。 – John

+0

@John:有很多由MS運行的UserVoice網站。嘗試提出請求(如果它不存在)爲REST服務添加對WADL或WSDL2描述的支持。一旦說明可用,您也可以爲客戶提供一代產品。 –

1

不是直接的,但從我見過的少數示例中,使用Web Api需要設置一個ServiceContract。看起來,如果您根據需要使用常規OperationContract屬性DataContract屬性添加第二個服務合同接口,那麼您可以使用您選擇的標準WCF綁定和其匹配的MEX端點創建端點。該服務將實現兩個接口,以便添加服務引用可以從標準WCF端點獲取WSDL文檔。

+0

有一些細節需要考慮,比如序列化(在兩種情況下都應該相同以避免阻抗),重複的方法屬性(這些在框架之間不兼容),還有認證和授權。我懷疑這是一件不值得的好處,但這是一個有趣的想法。 – John

8

我們沒有任何標準的機制來做到這一點。 REST是關於構建讓客戶獨立於服務器發展的系統。 HTTP定義了一個統一的GET,PUT,POST,DELETE等接口,因此不需要方法描述。由於這兩個原因,沒有REST WSDL等價物,或者我應該說沒有等價物在REST社區中有真正的勢頭(即有WADL)。

在REST服務耦合點真的是各地的媒體類型/身體格式。爲此,我們確實支持強類型機制。在Web API中,我們發佈了一個HttpClient(Nuget上的HttpClient),它允許您採用CLR類型並轉換爲某種表示形式。開箱即用,它支持XML和JSON。

因此,你可以創建一個CLR類型,並與客戶共享,然後使用HttpClient的客戶端上。

要創建類型本身,還有幾個選項。

  1. 手動創建它
  2. 使用「粘貼爲XML」工具,並使用網絡API的自動幫助頁面功能複製/粘貼。