0

.NET wcfSOAPWebサービスに情報を送信する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を調べましたが、bodyメンバーセットを取得できません。私のアクションスクリプトは、これが機能していないように見えます

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 オブジェクトを取得してから、upload メソッドに 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 に答える