2009-10-23 26 views
5

我一直在努力創建獨立於.Net客戶端運行的WCF服務。感謝Google和StackOverflow,我已經能夠創建簡單的xml和json服務,而不需要Soap包裝器和一些我不需要的花哨的WCF資料。這是一個痛苦的經歷,因此是這個問題的主題。當自動添加服務引用時,WCF在客戶端使用WebGet和WebInvoke時很瘋狂。WCF客戶端(添加服務引用)討厭WebGet和WebInvoke ...真的,它確實是

爲了檢查通信,我一直在本地創建一個WCF客戶端,並通過Fiddler傳遞所有內容。這樣,無論它是否有效,我至少可以看到客戶想要發送的內容。當它終於有效時,我可以看到兩端發送的數據,然後在非客戶端複製這個通信。

我目前的問題是,當我更改服務期望POST數據爲json(enableWebScript行爲)時,客戶端不知道,並且它仍嘗試將對象作爲xml發送。我在使用添加服務引用時沒有自動正確設置客戶端的配置,導致了很多問題,所以我希望能夠在客戶端的app.config中添加一些簡單的東西。當使用XML時,我在服務中創建和使用的對象會自動由客戶端xml序列化(這是最方便的)。這甚至有可能在當前版本的WCF中作爲json使用?

應該指出,我能夠弄清楚我需要手動做什麼,並使用Fiddler(請求生成器)以原始形式工作,以便我可以在代碼中序列化我的對象並手動發送數據通過http post ...這就是我在非網絡客戶端做這件事的方式。這更多的是爲了更好地理解WCF方面的問題,以及爲什麼我在客戶端缺少如此多的屬性,而這些屬性幾乎沒有可用於解決問題的文檔。

+0

男人..我希望我早點讀過這個。我們基本上經歷了完全相同的思考過程。我期望REST客戶端像SOAP客戶端一樣「正常工作」。 – 2012-01-23 23:05:22

+0

您是否與WCF綁定,或者您是否有服務器/服務有效負載技術選項?自從兩年前發佈這篇文章以來,我一直拒絕使用WCF做任何事情。我手動創建或使用的每個服務都會構建輕量級xml和/或json數據,並且我將自己的安全性和WCF試圖讓開發更方便的任何其他服務都推出。我認爲這很好說明,幾乎不可能找到一個受歡迎的公共Web API作爲WCF服務 – Rich 2012-01-24 11:30:28

+0

不,我們並沒有與WCF綁定,但我認爲我們可以嘗試使用它來獲得我們的服務之一。使用WCF構建服務器端組件是件痛苦的事,直到我們理解了所有事情。儘管......不用手工構建端點就很好(我們得到了SOAP/REST/JSON都可以工作)。現在,我意識到如果我們使用.NET客戶端並讓其他人使用REST/JSON,我們將只使用SOAP。 – 2012-01-24 14:41:13

回答

3

WCF服務引用用於自描述的RPC有效負載 - 即SOAP,wsHttp等。同樣,WCF強類型客戶端僅用於RPC有效負載,因爲只有它們能夠廣播所有類型信息等它需要正常工作。

當您使用webget和webinvoke時,您正在創建非rpc服務(用於編寫REST服務),這些服務也不是自我描述的,因此它不是理想的服務參考功能。你可以編寫一個.Net客戶端 - 但是你會發現使用WebClient/WebRequest編寫它,手動格式化/讀取XML/Json請求/響應要容易得多(或者使用DataContractSerializer和DataContractJsonSerializer幫助解決這個問題)。

1

SOAP是自描述的(通過WSDL)。

WebGet/WebInvoke不公開任何會告訴客戶端使用JSON而不是XML的元數據。

相關問題