Abbiamo un servizio Web attivo e funzionante costruito in VS2010.Esiste un buon modo per estendere un servizio WCF utilizzando basicHttpBinding per consentire anche al servizio REST di comunicare con JSON?
Molti dei contratti operativi si presenta così:
[OperationContract]
ITicket Login(string userName, byte[] passwordHash, string softwareVersion);
Vale a dire lo stand ha argomenti complessi e tipi di ritorno complessi, o anche più resi.
Abbiamo recentemente avviato un progetto di iPhone in outsourcing e stiamo consentendo loro di utilizzare questo servizio per comunicare con il nostro server. Da quello che ho imparato da loro ho capito che questa non è una buona pratica per comunicare con l'iPhone (mancanza di buoni modi per consumare il WSDL per esempio). E quindi ho iniziato a considerare la possibilità di esporre il servizio come servizio REST che comunica con JSON.
ho aggiunto un nuovo endpoint, utilizzando webHttpBinding, decorato i contratti di questo tipo:
[OperationContract]
[WebGet(UriTemplate = "/login?username={userName}&password={password}&softwareVersion={softwareVersion}", ResponseFormat=WebMessageFormat.Json)]
ITicket Login(string userName, string password, string softwareVersion);
Questo metodo ora funziona come dovrebbe.
Allora ho provato a decorare un altro metodo come questo:
[OperationContract]
[WebGet(UriTemplate = "/GetMetaData?ticket={ticket}",RequestFormat=WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
IMetaData GetMetaData(ITicket ticket);
Quando io ora provo ad accedere a questa ricevo il seguente errore:
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'.
devo riuscire a costruire un OperationContract che solo prende una stringa come argomento e poi analizza il thin-end usando il DataContractJsonSerializer
, ma sembra più un brutto scherzo.
C'è un modo per risolvere questo in un modo migliore? Sono un principiante quando si tratta di WCF e REST, quindi non abbiate paura di indicarmi qualche tutoraggio per principianti che potrebbe esserci là fuori. Ho provato a cercarli ma la grande quantità di fonti rende difficile trovare quelli buoni.
quale versione di WCF stai usando? –
Sto usando .net4 e VS2010, risponde la domanda? Altrimenti fammi sapere come posso cercare. –