我很难让一个简单的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">
......
答案 0 :(得分:2)