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的屏幕轮播系列以及如何使用它。

渣子