我们有一个在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,这是否回答这个问题?否则让我知道我该如何查找它。 –