是否有人知道或更好地拥有一个WCF服务的示例,该服务将接受编码multipart/form-data
的表单帖子,即。从网页上传文件?
我在谷歌上空了。
Ta,Ant
答案 0 :(得分:60)
所以,这里......
创建一个服务合同,该服务合同接受一个流作为其唯一参数的操作,用WebInvoke进行装饰,如下所示
[ServiceContract]
public interface IService1 {
[OperationContract]
[WebInvoke(
Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/Upload")]
void Upload(Stream data);
}
创建课程......
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
}
配置,接受流数据和最大大小
<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进度条,您可能希望添加一些安全性。
答案 1 :(得分:1)
我并不确切知道你在这里要完成什么,但是在“经典”基于SOAP的WCF中没有内置支持来捕获和处理表单发布数据。你必须自己做。
另一方面,如果您正在使用webHttpBinding讨论基于REST的WCF,那么您当然可以使用[WebInvoke()]属性修饰的服务方法,该属性将使用HTTP POST方法调用。
[WebInvoke(Method="POST", UriTemplate="....")]
public string PostHandler(int value)
URI模板将定义HTTP POST应该使用的URI。你必须把它连接到你的ASP.NET表单(或者你用来实际发布的任何内容)。
有关REST样式WCF的精彩介绍,请参阅WCF REST入门套件上的Aaron Skonnard的screen cast series以及如何使用它。
马克