当前位置:  开发笔记 > 编程语言 > 正文

RESTful WCF服务在发送"原始"XML时返回400代码

如何解决《RESTfulWCF服务在发送"原始"XML时返回400代码》经验,为你挑选了0个好方法。

我一直在用我的头撞墙两天,希望有人可以帮我一把.我所拥有的是使用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/ 我收到400(错误请求).所以我使用以下代码启用了一些跟踪器以查看发生了什么:



  
    
      
    
  

正如您所看到的,我使用切换值'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服务返回.

任何帮助将不胜感激!!

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有