2009-09-17 56 views
1

我現在有一個WCF服務消費遠程REST服務有以下:WCF XmlSerialization屬性(POST)

[ServiceContract] 
[XmlSerializerFormat] 
public interface IMyApi 
{ 
[OperationContract] 
[WebGet(
    ResponseFormat = WebMessage.Xml, 
    UriTemplate = "RemoteServicePage.jsp")] 
MyNewClass Send(); 
} 

關於這個的好處部分是XmlSerializerFormat屬性。將響應自動反序列化爲方法的返回類型(即,POX response => MyNewClass)。

但是,我找到了相反的樣本,但沒有成功。我想發佈一個POX請求給一個給定的服務。我很好奇,是否有類似的方法將對象傳遞給WCF服務,WCF服務又將請求發送到目標。

任何想法非常感謝。

UPDATE

只是一個澄清的問題:

是否有可能通過WCF(其中處理序列化)發佈的目的是Web服務?

UPDATE

我相信史蒂夫談到了什麼,我相信是與使用WebInvoke方法和屬性RequestFormat達到什麼我正在尋找下正確的方向。我想我想指出,我沒有託管允許發佈的Web服務,而是嘗試使用WCF發佈到外部Web服務(即,遠程* .jsp)。

WCF允許輕鬆使用和訪問外部Web服務,這是我熟悉的。我從來沒有試圖將流或對象發佈到外部源(然而,通過UriTemplate發佈很簡單)。

回答

1

我不明白。爲什麼不使用HttpWebRequest?通過HTTP執行REST的好處之一是您可以使用標準的HTTP庫。用HttpWebRequest做POST是相對平凡的。爲什麼你需要WCF?如果你想序列化一個對象到你的POST正文中,那麼你可以通過DataContractSerializer或者XmlSerializer來完成。

如果您確實不喜歡該選項,請查看WCF Rest Starter Kit Preview 2中的新Microsoft.Http.HttpClient類。它是一個非常好的客戶端庫,儘管它的名稱和打包方式不同,它甚至沒有依賴於WCF!

此答案基於您的第二次更新。我只是這樣說,因爲你最初的聲明「我目前有一個WCF服務來使用遠程REST服務」是沒有意義的。您不能聲明性地定義您想要使用的遠程接口。術語WebInvoke並不是您所想的,它僅僅是一個處理非GET請求的catch all屬性。 WebGet和WebInvoke都處理傳入的請求。

如果要使用遠程「REST」接口,則需要使用HttpWebRequest或新的HttpClient類。

+0

嘿達雷爾,我很欣賞這裏的迴應。主要是爲了讓我面對過度複雜的東西;)我們目前使用WCF爲第三方服務發出GET請求,這對我們來說很好地處理了序列化,並且正在尋找將某些東西發佈到相同的服務。我意識到我不必使用WCF來實現這一點,但由於依賴已經存在,我不確定這是否可能。 – 2009-09-22 15:16:10

+0

很高興你知道它只是一個友善的耳光。 :) – 2009-09-22 19:17:50

1

我不認爲你明白XmlSerializerFormat的含義。這意味着應該使用XML序列化器代替數據協定序列化器。兩者都將序列化爲XML。

0

使用RequestFormat屬性。對於JSON,這將是

[WebInvoke(Method = "POST", 
       BodyStyle = WebMessageBodyStyle.WrappedRequest, 
       ResponseFormat = WebMessageFormat.Json, 
       RequestFormat = WebMessageFormat.Json)] 

好運