WCFはStreamを利用して大きなファイルをアップロードする
11097 ワード
他の人の文章から転じて、この例を学んで、基本的にwcfも入門して、インタフェースの使い方、システムの配置はすべてありました
本文はasp.Netではwcfのstream方式で大きなファイルを転送し,大きなファイルアップロードの問題を解決した.主にアーカイブが便利で、後でこの問題に遭遇したのは調べに来たことです.一部のコードを貼って、疑問や完全なコードが必要な場合はWebForm 1にメッセージを残してください.aspx.cs
IService1
Service1.svc
web.config
何人かの学生がソースコードを望んでいるのを見て、私は再びテスト工事をして、テストを経てネットの支持さえすれば、数十M以上の大きいファイルをアップロードすることができます
テストプロジェクトのソースコードを添付:http://files.cnblogs.com/easywebfactory/WcfService1.rar
本文は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