2009-06-17 28 views
4

我有一個WCF restul服務,我想允許用戶選擇他們想要的請求格式,我有裝飾WCF WebInvoke ResponseFormat

[OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "getstreamurl?ch={ch}&format=xml")] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "getstreamurl?ch={ch}&format=json")] 

首先,有沒有在指定ResponseFormat方式運行時並將格式作爲參數傳遞給方法?從閱讀周圍我不這麼認爲...好吧接下來的事情 上面的代碼是可以和工作,但即時通訊有問題,我希望能夠指定一個默認值,所以當沒有格式的爭論通過,那麼我只是默認的,但如果我裝點像這樣

[WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "getstreamurl?ch={ch})] 

    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "getstreamurl?ch={ch}&format=json")] 

凡XML是默認的,如果我嘗試通過瀏覽器來調用服務方法,它告訴我,:

UriTemplateTable不支持有相當的多個模板路徑作爲模板'getstreamurl?ch = {ch}',但具有不同的查詢字符串,其中查詢字符串不能全部通過字面值消除歧義。有關更多詳細信息,請參閱UriTemplateTable的文檔

它們顯然可以區分,但看起來WCF只讀取參數並且多數民衆贊成它......任何建議?

回答

5

不,我不認爲你可以在運行時以編程的方式做到這一點。當你要從你的服務中暴露出兩個不同的端點時,你會怎麼做可以 - 一個返回XML,另一個返回JSON,然後以編程方式選擇從客戶端應用程序調用哪一個端點。

馬克

更新:史蒂夫·米凱洛蒂正確地指出,這JSON和XML之間的自動切換,現在可以在WCF 4.0實現。 WCF 4.0具有改進的REST支持,該支持還包括基於HTTP Accept頭的格式化消息選擇功能。

有關WCF 4.0的新功能的詳細信息,請參閱:A Developer's Introduction to WCF 4.0

+0

這是不正確的。正如Regfor在他的迴應中指出的那樣,您可以通過在Accept頭中傳遞適當的值來讓相同的端點返回XML或json。 – 2011-07-31 02:25:20

+1

@Steve Michelotti:這個新功能是在.NET 4.0的WCF 4.0中引入的 - 在2009年6月,當我用WCF 3.5 – 2011-07-31 07:13:32

3

如果你的休息服務配置自動選擇響應類型你可以做到這一點。

然後在客戶端請求上簡單地添加需要的頭Accept:application/json

相關問題