首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将HTML表单发布到WCF服务

将HTML表单发布到WCF服务
EN

Stack Overflow用户
提问于 2011-07-05 23:11:14
回答 1查看 3.1K关注 0票数 0

使WCF服务与HTML表单post一起工作时遇到问题。我正在创建一个SVGToPng服务。该服务接受字符串(SVG数据)并将其转换为要下载的图像(使用保存文件对话框)。现在,所有现有服务都配置为使用JSON作为消息类型。这个特殊的方法将是唯一的,而我需要执行一个很好的老式表单POST。

这是该服务的接口。

代码语言:javascript
复制
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = UriTemplate.SvgExportPng, BodyStyle = WebMessageBodyStyle.Bare)]
Stream ExportSvgToPng(String svgData);

出于测试的目的,我让服务只读取一个现有的图像文件并返回它(只是为了测试服务)。这是代码。

代码语言:javascript
复制
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。

代码语言: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的文档。

非常感谢您的帮助,提前谢谢您。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-06 01:12:50

您的操作需要一个特定格式的字符串,它可以是JSON字符串(内容类型为applicaiton/json),也可以是包装在<string>元素(具有序列化名称空间)和内容类型文本/ XML (或应用程序/xml)中的xml。问题是表单POST正在发送表单/url编码的数据(内容类型application/x-www- form -urlencoded)。

WCF不支持forms-urlencoded,但是你可以从http://wcf.codeplex.com那里获得"jQuery支持“,它有一些类来支持它,或者将输入作为流(就像你对输出所做的那样)并自己解析表单/urlencoded数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6584939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档