我們有一個在VS2010中建立並運行的Web服務。有沒有一種使用basicHttpBinding擴展WCF服務以允許REST服務與JSON通信的好方法?
一些業務合同是這樣的:
[OperationContract]
ITicket Login(string userName, byte[] passwordHash, string softwareVersion);
即他們的展位具有複雜的論點和複雜的回報類型,甚至是多重回報。
我們最近開始了一個外包iPhone項目,並讓他們使用此服務與我們的服務器通信。 從我從他們身上學到的東西我明白,這不是一個溝通到iPhone的好習慣(缺乏消耗WSDL的好方法)。因此,我開始考慮將服務作爲與JSON通信的REST服務公開的可能性。
我添加了一個新的端點,使用的WebHttpBinding,裝飾這樣的合同:
[OperationContract]
[WebGet(UriTemplate = "/login?username={userName}&password={password}&softwareVersion={softwareVersion}", ResponseFormat=WebMessageFormat.Json)]
ITicket Login(string userName, string password, string softwareVersion);
這種方法現在按預期工作。
然後我試圖來裝飾另一種方法是這樣的:
[OperationContract]
[WebGet(UriTemplate = "/GetMetaData?ticket={ticket}",RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
IMetaData GetMetaData(ITicket ticket);
現在當我嘗試訪問此我收到以下錯誤:
Server Error in '/Jetas5MobileService' Application. Operation 'GetMetaData' in contract 'IJetas5MobileService2' has a query variable named 'ticket' of type 'Jetas.MobileService.DataContracts.ITicket', but type 'Jetas.MobileService.DataContracts.ITicket' is not convertible by 'QueryStringConverter'. Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'.
我必須設法建立一個OperationContract的,只有需要一個字符串作爲參數,然後通過使用DataContractJsonSerializer
來解析後端的精簡,但這更像是一種醜陋的黑客攻擊。
有什麼方法可以更好地解決這個問題嗎? 我是WCF和REST的初學者,所以不要害怕將我指向任何有可能在那裏的初學者教程。我試圖尋找它們,但是大量的信息來源使得很難找到好的信息。
您正在使用哪個版本的WCF? –
我正在使用.net4和VS2010,這是否回答這個問題?否則讓我知道我該如何查找它。 –