我正在尝试在将信息发送到 .NET wcf SOAP Web 服务的 flex/air 应用程序中创建文件上传。文件上传还必须有进度指示事件。该服务使用 Stream 作为 MessageBodyMember 以允许流式上传。我的输入看起来有点像这样:
[MessageContract]
public class SendFileRequestMessage : IDisposable
{
public string UserName;
[MessageBodyMember(Order = 1)]
public Stream FileData;
}
服务看起来像这样:
public interface IFileTransferService
{
[OperationContract]
SendFileResponseMessage SendFile(SendFileRequestMessage request);
}
现在,当我在 VS2010 中创建代理类时,我得到了 FileData 的 Stream 对象。如果我在 Flash Builder 4.7 中执行相同操作,则 FileData 被解释为 ByteArray。我已经在我的客户端中查看了 FileUpload 和 UrlLoader,但我无法设置正文成员。我的动作脚本现在看起来像这样 不起作用
var dataToSave:XML = <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:q0="http://mystuff/uploadservice/v1"><soapenv:Body><q0:SendFile/></soapenv:Body></soapenv:Envelope>
var request:URLRequest = new URLRequest("http://localhost:31454/Uploadhandler.svc");
request.requestHeaders = new Array(new URLRequestHeader("SOAPAction", "http://mystuff/uploadservice/v1/IFileTransferService/SendFile"));
request.data = dataToSave;
request.contentType = "text/xml; charset=utf-8";
request.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
loader.load(request);
那么如何将流文件从 flex 上传到soap服务呢?任何帮助将不胜感激。