wcf 休息服务响应中的 xml 被更改 为啥?

Posted

技术标签:

【中文标题】wcf 休息服务响应中的 xml 被更改 为啥?【英文标题】:xml gets altered in the wcf rest service response Why?wcf 休息服务响应中的 xml 被更改 为什么? 【发布时间】:2013-10-19 10:20:07 【问题描述】:

Followin 是我的 OperationContract

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "/send?canvasbyte=imgbyte")]
string sendresponse(string imgbyte);

以下是我的 OperationContract 实现,我在这里返回相同的参数(字符串)

public string sendresponse(string imgbyte)

            return imgbyte;

我正在使用 html5 客户端应用程序测试此服务,从它的 java 脚本中我发送一个 xmlHttpRequest 作为 get 方法 url 中传递的值是 Canvas 绘图的 DataUrl。

var canvas = document.getElementById('canvasid');
console.log(canvas.toDataURL());
var url = "http://myserverurl.com/ServiceImpl.svc/send?canvasbyte=" +          canvas.toDataURL().toString();
var xmlHttp = new XMLHttpRequest();
xmlHttp.onload = function () 

    var xmldocument = xmlHttp.responseText;
    console.log(xmlHttp.responseText);

;
xmlHttp.open("GET", url, true);
xmlHttp.send();

这是我的客户端代码,canvas dataurl 是一个大文本值。 服务收到并返回相同的东西 但在这里我得到了一些改变的结果。为什么?? 我想我在结果中缺少一些“+”号..

【问题讨论】:

???请提供某种指示,说明 imgByte 到底是什么,以及它返回的内容是什么? 实际上我正在发送一个长字符串.. 在服务中,字符串中的所有 + 符号都替换为空格.. 这就是问题.. 【参考方案1】:

加号被浏览器解释为空格。

由于您使用的是 GET 方法,因此您的请求数据最终会出现在查询字符串中(如果可以的话,最好使用 POST)。

由于数据在查询字符串中,服务器会自动将 + 更改为空格。

这是一个可以提供更多帮助的线程。

Plus sign in query string

【讨论】:

【参考方案2】:

这段代码问题太多了。

首先,默认 IIS 配置不允许任何超过 2000 个字符的 url。 其次,get 需要传递转义值,所以 name=Files/John Doe 变为 name=Files%2FJohn+Doe 不仅仅是 + 符号。

尝试将您的数据发布到您的方法。

【讨论】:

以上是关于wcf 休息服务响应中的 xml 被更改 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 WCF 休息服务(不是使用 WCF 休息服务模板创建的)不起作用?

WCF 休息服务 - 获得对 HTTP 响应标头的访问权限

WCF 休息服务不返回 JSON 数据。但它适用于 XML

调用 wcf 休息服务并以 xml 或 json 格式返回数据

从wcf服务响应的结果中生成xml

想将图像从 android 发布到 WCF 休息服务