WCFはStreamを利用して大きなファイルをアップロードする

11097 ワード

他の人の文章から転じて、この例を学んで、基本的にwcfも入門して、インタフェースの使い方、システムの配置はすべてありました
本文はasp.Netではwcfのstream方式で大きなファイルを転送し,大きなファイルアップロードの問題を解決した.主にアーカイブが便利で、後でこの問題に遭遇したのは調べに来たことです.一部のコードを貼って、疑問や完全なコードが必要な場合はWebForm 1にメッセージを残してください.aspx.cs
protected void Button1_Click(object sender, EventArgs e)

        {

            FileData file = new FileData();
            file.filename = FileUpload1.FileName;
            file.data = FileUpload1.PostedFile.InputStream;
            GetDataService c = new GetDataService();
            c.UploadFile(file);
            Response.Write(" !");
}

IService1
namespace WcfService1

{

    //   :   “  ”    “   ”  ,                  “IService1”。

    [ServiceContract]

    public interface IGetDataService

    {

        [OperationContract]

        void UploadFile(FileData file);

    }

    [MessageContract]

    public class FileData

    {

        [MessageHeader]

        public string filename;

        [MessageBodyMember]

        public Stream data;

    }







}

 
Service1.svc
namespace WcfService1

{

    public class GetDataService : IGetDataService

    {

        public void UploadFile(FileData file)

        {

            

            FileStream fs = new FileStream("D:\\    \\WcfService1\\Files\\" + file.filename, FileMode.OpenOrCreate);



            try

            {



                BinaryReader reader = new BinaryReader(file.data);



                byte[] buffer;



                BinaryWriter writer = new BinaryWriter(fs);

                long offset = fs.Length;

                writer.Seek((int)offset, SeekOrigin.Begin);



                do

                {



                    buffer = reader.ReadBytes(1024);



                    writer.Write(buffer);



                } while (buffer.Length > 0);



                fs.Close();

                file.data.Close();



            }

            catch (Exception e)

            {

                throw new Exception(e.Message);

            }

            finally

            {



                fs.Close();

                file.data.Close();



            }



        }

    }

 
web.config
<configuration>



  <system.web>

    <compilation debug="true" targetFramework="4.0" />

      <httpRuntime   maxRequestLength="40960" />

  </system.web>

    <system.serviceModel>

        <bindings>

            <basicHttpBinding>

                <binding name="BasicHttpBinding_IGetDataService" closeTimeout="00:01:00"

                    openTimeout="00:01:00" receiveTimeout="01:10:00" sendTimeout="01:10:00"

                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

                    transferMode="Streamed"

                    useDefaultWebProxy="true">

                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"

                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />

                    <security mode="None">

                        <transport clientCredentialType="None" proxyCredentialType="None"

                            realm="" />

                        <message clientCredentialType="UserName" algorithmSuite="Default" />

                    </security>

                </binding>

            </basicHttpBinding>

        </bindings>

        <client>

            <endpoint address="http://localhost:52884/mex" binding="basicHttpBinding"

                bindingConfiguration="BasicHttpBinding_IGetDataService" contract="IGetDataService"

                name="BasicHttpBinding_IGetDataService" />

        </client>

    </system.serviceModel>

 <system.webServer>

    <modules runAllManagedModulesForAllRequests="true"/>

  </system.webServer>

  

</configuration>

何人かの学生がソースコードを望んでいるのを見て、私は再びテスト工事をして、テストを経てネットの支持さえすれば、数十M以上の大きいファイルをアップロードすることができます
テストプロジェクトのソースコードを添付:http://files.cnblogs.com/easywebfactory/WcfService1.rar