0

我正在尝试在将信息发送到 .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服务呢?任何帮助将不胜感激。

4

1 回答 1

0

我不熟悉 .NET SOAP 模型,但如果它期望文件数据的标准 http 内容配置,您可以尝试获取文件的 FileReference 对象,然后在其上传方法中传递您的 URLRequiest。在你的情况下,这可能是

        ... Create class level variable ...
        var fr:FileReference = new FileReference();

        ... Obtain file reference somewhere ...
        //Set handlers for Filereference events 
        fr.browse(); //Obtain actual file reference  


        ... Somewhere in selectHandler chain....

        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;

        //Do POST
        fr.upload(request);

文档包含使用 FileReference 的示例。

于 2013-01-16T11:30:37.523 回答