HTML表单POST到WCF服务

时间:2011-07-05 15:11:14

标签: javascript .net wcf http-post wcf-rest

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

这是服务的界面。

[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中,我动态创建表单,添加我需要的值,POST表单,然后从文档中删除它。这是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的文档。

非常感谢任何帮助,提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的操作需要一个字符串 - 并且采用某种格式,可以是JSON字符串(内容类型为applicaiton / json),也可以是包含在<string>元素中的XML(带有序列化命名空间)和内容类型text / xml(或application / xml)。问题是POST表单正在发送表单/ url编码数据(内容类型application / x-www-form-urlencoded)。

WCF不支持form-urlencoded开箱即用,但您可以从http://wcf.codeplex.com获得“jQuery支持”,其中有一些类支持它,或者将输入作为Stream (就像你对输出所做的那样)并自己解析表单/ urlencoded数据。