Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML表单发送到WCF服务_Javascript_.net_Wcf_Http Post_Wcf Rest - Fatal编程技术网

Javascript HTML表单发送到WCF服务

Javascript HTML表单发送到WCF服务,javascript,.net,wcf,http-post,wcf-rest,Javascript,.net,Wcf,Http Post,Wcf Rest,无法让WCF服务与HTML表单帖子一起使用。我正在创建一个SVGToPng服务。该服务接受字符串(SVG数据)并将其转换为要下载的图像(使用“保存文件”对话框)。现在,所有现有服务都配置为使用JSON作为消息类型。这种特殊的方法将是独特的,而我需要执行一个良好的老式形式后 这是服务的接口 [OperationContract] [WebInvoke(Method = "POST", UriTemplate = UriTemplate.SvgExportPng, BodyStyle = WebMe

无法让WCF服务与HTML表单帖子一起使用。我正在创建一个SVGToPng服务。该服务接受字符串(SVG数据)并将其转换为要下载的图像(使用“保存文件”对话框)。现在,所有现有服务都配置为使用JSON作为消息类型。这种特殊的方法将是独特的,而我需要执行一个良好的老式形式后

这是服务的接口

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = UriTemplate.SvgExportPng, BodyStyle = WebMessageBodyStyle.Bare)]
Stream ExportSvgToPng(String svgData);
为了测试,我让服务读取一个现有的图像文件并返回它(只是为了测试服务)。这是密码

WebOperationContext.Current.OutgoingResponse.ContentType = "image/png";
WebOperationContext.Current.OutgoingResponse.Headers.Clear();
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-disposition", "attachment; filename=export-" + DateTime.Now.ToString("MM-dd-yyyy") + ".png");

return File.OpenRead(@"C:\tmp.png");
在javascript中,我动态创建表单,添加所需的值,发布表单,然后将其从文档中删除。下面是javascript

form.setAttribute("method", "POST");
form.setAttribute("action", Daedalus.Current.WcfUrl + '/svg/png');

hiddenField.setAttribute("name", "svgData");
hiddenField.setAttribute("value", view.trend.getSVG());

form.appendChild(hiddenField);
document.body.appendChild(form);

form.submit();
document.body.removeChild(form);
最后,这里是我在WCF日志文件中收到的错误消息

传入消息具有意外的消息格式“Raw”。操作的预期消息格式为“Xml”、“Json”。这可能是因为尚未在绑定上配置WebContentTypeMapper。有关更多详细信息,请参阅WebContentTypeMapper的文档


非常感谢您提供的任何帮助。

您的操作需要一个字符串,并且是特定格式的,可以是JSON字符串(具有内容类型applicationon/JSON),也可以是包装在
元素(具有序列化命名空间)和内容类型text/XML(或application/XML)中的XML。问题在于表单POST正在发送表单/url编码的数据(内容类型为application/x-www-form-urlencoded)

WCF不支持表单urlencoded开箱即用,但您可以获得“jQuery支持”,其中有一些类支持它,或者将输入作为流(就像您处理输出一样),自己解析表单/urlencoded数据