這是http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/94503037-9cc4-494d-88af-4e97fcb9cdcc的副本,但我沒有太多的成功在那裏獲得豐碩的答案。 :(任何毫不費力地創建WCF REST客戶端發佈urlformatted請求?
我一直在試圖找到自ChannelFactory得到一個很好的具體REST服務客戶端(代理)的信息。
至於我已經想通了,你可以設置客戶端界面上attirubtes那告訴WCF使用XML(DataContract或XmlSerialization)或JSON作爲響應,以及URL格式的HTTP獲取請求或XML/JSON的HTTP post。[編輯]當然也可以通過編程或通過配置提供不同的綁定配置。從原始]
我想要的是在服務接口上的一些屬性告訴WCF創建一個URL格式的POST,沒有XML頭,然後得到一個響應我XML。 (舉例來說) [由原來編輯]和/或提供BCL綁定支持follosing [由原來/編輯]
哆啦A夢的情況是這樣的:
public interface IRestClient
{
[WebInvoke]
AuthResponse Authorize(
[HeaderParameter]
string someHeader,
string someData,
int someInt)
}
// ...
var client = channelFactory.CreateChannel<IRestClient>(); // whatever bindings I'd need for this
var response = client.Authorize("abc", "def", 123);
而且具有client.Authorize實際上做
HTTP POST /authorize
someHeader: abc
someData=def&someInt=123
和反序列化
<AuthResponse>
<Message>Hi there!</Message>
</AuthResponse>
據我發現,從谷歌搜索和論壇顛覆,除非你做了大量的管道,編寫攔截器,格式化程序和上帝知道什麼,否則沒有辦法做到這一點。
WCF貢獻庫,WCF樣本等。人。是太學術了,太多管道和/或太少直觀的文件,我沒有痛苦做到這一點。 :)
任何提示,我可以找到最簡單的方法來做到這一點?
(請不要告訴我用HttpRequest
或WebClient
,這就是爲什麼我們有ChannelFactory
;!))
[更新]
糾正我,如果我錯了,但據我所知,很多所謂的REST API需要URL格式的請求,而不是Json或Xml。
基於Web的服務接口的WCF解釋反映方法定義的WebGet
和WebInvoke
屬性,以確定如何調用「服務」上的每個「方法」。 (讓我簡單地稱它爲方法和服務)
WebInvoke
屬性採用WebRequestFormat
枚舉值來確定如何序列化請求。該枚舉只有Json和Xml。
似乎真的很愚蠢,這是一個枚舉,而不是一些指向格式化器/序列化工廠的指針,甚至是一個具體的說法。
所以,這個問題真的歸結爲最簡單的,最好已經實現的,覆蓋請求的序列化。
[/更新]
生命太短而不能使事情複雜化。 RestSharp和ASP.NET Web API存在是有原因的。 – 2012-02-20 15:55:41
這會讓生活變得更加複雜。最好在BCL中擁有它。我會看看RestSharp。我想要的是一個簡單的自定義綁定組合,它可以將其用於WCF頻道。 – 2012-02-20 16:01:23
@Magnus別忘了Spring.NET REST客戶端:http://www.springframework.net/rest – bbaia 2012-02-20 18:41:17