WCF服务接受一个后编码的多部分/表单数据
有谁知道,或者更好的,但有一个WCF服务的例子,将接受表格后编码multipart/form-data
即。 从网页上传文件?
我已经空了谷歌。
Ta,Ant
所以,这里…
创build你的服务契约,其中一个只接受一个stream参数的操作,用下面的WebInvoke装饰
[ServiceContract] public interface IService1 { [OperationContract] [WebInvoke( Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/Upload")] void Upload(Stream data); }
创build类…
public class Service1 : IService1 { public void Upload(Stream data) { // Get header info from WebOperationContext.Current.IncomingRequest.Headers // open and decode the multipart data, save to the desired place }
和configuration,接受stream数据,和最大的大小
<system.serviceModel> <bindings> <webHttpBinding> <binding name="WebConfiguration" maxBufferSize="65536" maxReceivedMessageSize="2000000000" transferMode="Streamed"> </binding> </webHttpBinding> </bindings> <behaviors> <endpointBehaviors> <behavior name="WebBehavior"> <webHttp /> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior name="Sandbox.WCFUpload.Web.Service1Behavior"> <serviceMetadata httpGetEnabled="true" httpGetUrl="" /> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> </behaviors> <services> <service name="Sandbox.WCFUpload.Web.Service1" behaviorConfiguration="Sandbox.WCFUpload.Web.Service1Behavior"> <endpoint address="" binding="webHttpBinding" behaviorConfiguration="WebBehavior" bindingConfiguration="WebConfiguration" contract="Sandbox.WCFUpload.Web.IService1" /> </service> </services> </system.serviceModel>
同样在System.Web中增加了System.Web允许的数据量
<system.web> <otherStuff>...</otherStuff> <httpRuntime maxRequestLength="2000000"/> </system.web>
这只是基础知识,但允许添加一个Progress方法来显示ajax进度条,并且您可能需要添加一些安全性。
我不完全知道你要在这里完成什么,但是在“传统的”基于SOAP的WCF中没有内置的支持来捕获和处理表单发布数据。 你必须自己做。
另一方面,如果你正在讨论基于REST的WCF和webHttpBinding,你当然可以有一个用[WebInvoke()]属性来装饰的服务方法,这个方法将被HTTP POST方法调用。
[WebInvoke(Method="POST", UriTemplate="....")] public string PostHandler(int value)
URI模板将定义要在HTTP POST应该使用的地方使用的URI。 你必须把它和你的ASP.NET表单(或者你正在使用的任何东西)挂钩。
有关REST风格WCF的详细介绍,请参阅WCF REST入门工具包上的Aaron Skonnard的屏幕轮播系列以及如何使用它。
渣子