使用C#REST Client的另一个(400)错误请求:如何POST纯XML?

时间:2010-07-29 14:56:16

标签: c# xml rest

我很难让一个简单的RESTful Web服务应用程序与我的C#REST客户端一起工作。我正在尝试使用POST方法发送纯XML。

我已经创建了一个启动并运行的WCF Rest服务(我可以在浏览器中看到服务测试页面)。我也可以通过Fiddler调用我的WCF Rest服务,它会正确响应(我会得到一个返回值)。

但最大的问题是REST客户端。我已经使用各种指南完成了所有工作。此外,相同的客户端代码适用于基于Java的REST服务。但在.NET中我得到的是错误“远程服务器返回错误:(400)错误请求。”在Request.GetResponse()

之后发生此异常

由于我已经开发了WCF服务,我习惯于为客户端(app.config)和服务器(web.config)指定配置设置,但基于.NET的RESTful Web服务的情况如何?我的意思是,我是否需要为客户端(app.config)和服务器(web.config)指定相同的绑定设置(webHttpBinding)?

这是客户端代码:

XmlDocument TestDocument = new XmlDocument();
TestDocument.Load(XMLFilePath);
byte[] RequestBytes = Encoding.GetEncoding("iso-8859-1").GetBytes(TestDocument.OuterXml);

Uri uri = new Uri("http://localhost:2319/MyRESTService.svc/receive");

HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(uri);     

Request.ContentLength = RequestBytes.Length;
Request.Method = "POST";
Request.ContentType = "text/xml";

Stream RequestStream = Request.GetRequestStream();
RequestStream.Write(RequestBytes, 0, RequestBytes.Length);
RequestStream.Close();

HttpWebResponse response = (HttpWebResponse)Request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string ResponseMessage = reader.ReadToEnd();
response.Close();

我的WCF REST服务的web.config看起来像这样(我应该在C#REST客户端的app.config中指定相同的设置吗?):

<system.serviceModel>
<services>
  <service name="MyRESTService.MyRESTService">
    <endpoint binding="webHttpBinding" contract="MyRESTService.IMyRESTService"
              behaviorConfiguration="webHttp"/>
   </service>
</services>

<behaviors>

  <endpointBehaviors>
    <behavior name="webHttp">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

我的WCF REST服务的界面如下所示:

[ServiceContract]
public interface IMyRESTService

[OperationContract]
[WebInvoke(
  Method = "POST",
  UriTemplate = "/receive",
  RequestFormat = WebMessageFormat.Xml,
  ResponseFormat = WebMessageFormat.Xml,
  BodyStyle=WebMessageBodyStyle.Bare)]
string Receive(string xml);

据我所知,这是一个客户端问题,并且由于客户端发现问题而引发异常。但是在我的C#Rest Client中特别导致此异常的是什么?

XML看起来像这样:

<?xml version="1.0" encoding="iso-8859-1"?>
<MATMAS02>
<IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
......

1 个答案:

答案 0 :(得分:2)