使用.NET的HTTP POST复杂请求

问题描述:

我有一个使用.NET 3.5(VS2008)开发的Web服务方法,它需要几个字符串(用户名,密码,主题,文件类型)和Base64中的二进制文档。使用.NET的HTTP POST复杂请求

我启用了SOAP和HTTP POST。尽管SOAP完美工作,但不能发送HTTP POST请求。服务器响应“服务器无法处理请求--- >根级数据无效,第1行,第1位”。

客户正在使用此方法从其应用程序上传文件。

有人告诉我,.NET不支持使用HTTP POST的复杂结构。任何方式来支持这一点?

这听起来像你想从桌面应用程序转移到基于ASP的Web应用程序。

虽然这通常是一个好主意,但我认为在尝试通过http/form将文件发布到您的Web服务中时,您会遇到一场艰苦的战斗。虽然从技术上讲,我很难考虑实施。

使用表单作为输入变量和提交到表单的文件输入的代理,您可能会有更好的运气。一个网络表单,并使用webform上的代码隐藏来创建一个web服务类的实例(不需要使用代理服务器,您已经在线的一侧)。

如果这没有意义,请告诉我,如果它不能适合您的情况,请更新您的问题,以更清楚地说明您的预期结果。

如果您是通过Ajax来完成此操作,请使用[ScriptService]属性装饰您的服务类,并通过xmlhttp发布JSON。您可以轻松发送复杂的参数。

参见http://www.codeproject.com/Articles/38999/Consuming-ASP-net-WebServices-WCF-Services-and-sta.aspx的说明。

如果您不是,请详细说明发布内容以及您如何打包数据。

+0

我已更新我的问题:客户正在访问此方法以将他们的文档上传到我的服务。 – user240113 2010-02-19 09:20:50

+0

@ user240113,我已经更新了我的答案。我认为你需要重新考虑你的计划方法,并愿意提供帮助。详细说明你想要的结果。 – 2010-02-19 13:20:01

.NET不支持使用带有httpBinding的POX(plain old xml)的复杂结构。下面是介绍如何设置它的一篇文章: http://fluxcapacity.net/2007/11/06/how-to-create-restpox-web-services-with-wcf/

注:所有的SOAP,XML和JSON DTO更新仍然工作在HTTP POST - SOAP只是包装使用额外的标记,从而有效地只是增加了额外的开销,你的有效载荷网站(即Ajax)客户端的复杂性。

如果您希望您的同一个webservice能够通过SOAP以及其他端点(例如, XML或JSON,你可能会对这个opensource webservices framework感兴趣,它使所有这些端点无需任何额外的配置。