我一直在用我的头撞墙两天,希望有人可以帮我一把.我所拥有的是使用WCF编写的RESTful Web服务; 实际上只有两个接受单个字符串参数并返回字符串的方法.参数和返回值都是直接的XML.
[ServiceContract] public interface IService { [OperationContract] [WebGet(UriTemplate = "/method1/{data}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)] string Method1(string data); [OperationContract] [WebGet(UriTemplate = "/method2/{data}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)] string Method2(string data); }
为了论证,我们可以说这两种方法的实现如下所示:
public string Method1(string data) { return string.Format("You entered: {0}", data); }
如果我转到http://myuri.com/service.svc/method1/foo,则会向浏览器写入以下内容:
You entered: foo
这很好用,但如果我将网址更改为:http://myuri.com/service.svc/method1/
正如您所看到的,我使用切换值'All'来捕获在执行此服务期间发生的每个事件.我使用URL格式跑回了几次,这种格式可以验证跟踪器是否正常工作.然后我转到包含XML标记foo的URL并按预期收到400错误,但是当我回到日志文件时,没有附加信息附加到它的末尾.这使我相信在调用WCF服务之前显示400错误.
最后,我将方法从'GET'方法切换到'POST'方法,使用WebRequest/WebResponse写了一些具有相同结果的代码.现在我已经阅读了一些帖子,谈论在客户端使用XmlSerializer将数据发送到服务但是这违背了这项服务的目的.当我使用.NET编写服务时,很可能PHP或经典ASP脚本将连接到此服务,显然,他们无法访问XmlSerializer.
所以我的百万美元问题是:是否可以向WCF中开发的RESTful Web服务发送"原始"XML请求,如果是,如何?
PS进入和退出服务的XML不是基于任何有形对象,它只是我创建的用于此服务的结构.进入的XML通过XPath进行解析,将值放入更大的XML字符串中,并传递给外部API.该API的结果将被处理,然后由我的RESTful服务返回.
任何帮助将不胜感激!!