2011-04-25 111 views
2

我想創建一個簡單的非RESTful JSON服務使用WCF和.NET 4. 我想我的服務能夠解析具有特定的JSON請求消息格式是這樣的:創建WCF JSON(非RESTful)服務

{ "MethodNameRequest": { "MethodParam1Name": "ParamValue1", "MethodParam2Name": "ParamValue2" } } 

這項服務應該存在於一個恆定的URI(「HTTP:// MYSERVER /則將MyService /」)的端點,這樣所有的方法可以使用POST請求,它被調用。

的問題是,每當我試圖使用相同的「UriTemplate」和相同的HTTP動詞「POST」(使用WebInvokeAttribute)聲明瞭兩個(或更多)的方法,如:

[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")] 
public string Method1() 
{ 
    return "Method1"; 
} 

[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")] 
public string Method2() 
{ 
    return "Method2"; 
} 

我得到但以下情況除外:

在合同',有多個 操作與方法「POST」和 UriTemplate等同於「」。 每個操作都需要獨特的 UriTemplate和方法 的組合來明確分派消息。 使用WebGetAttribute或 WebInvokeAttribute更改操作的 UriTemplate和Method值。

關於如何配置WCF以允許這個的任何想法?

+0

顯示一些代碼...從你的問題不清楚 – 2011-04-25 17:06:46

+0

剛剛做到了!感謝您的評論。 – webwise 2011-04-25 17:11:04

+0

您在更換UriTemplate時有任何問題嗎? – 2011-04-25 17:31:39

回答

1

我不明白WCF如果能以某種方式允許爲不同的方法使用相同的UriTemplate,可以調用哪種方法進行調用。似乎你需要在方法內部實現邏輯來處理基於內容的處理。

+0

這是我想避免的解決方案。 我認爲,既然WCF支持「包裝」請求消息體,它可能會利用它來區分方法。 – webwise 2011-04-25 17:29:11

+0

如果它具有您想要的功能,那麼WebInvoke屬性需要有一個參數用於檢查請求並確定調用哪種方法,但不會。它只允許您配置請求和響應消息的結構。 – 2011-04-25 17:40:49

+0

包裝的響應消息格式中的方法名稱與代碼中的方法名稱相匹配,所以爲什麼不能在請求消息中使用它,以便「Method2Request」會自動映射到「Method2」 ? – webwise 2011-04-25 18:03:22

0

嘗試省略UriTemplate屬性,請使用web.config中的<enableWebScript/>元素。這將允許wcf自動處理您的請求。