2012-04-22 16 views
4

私はどこにでも見てきましたが、問題を解決するために多くの修正を試みましたが、私は紛失しています。 。私は、ファイルをアップロードするために使用するWCFサービスを持つASP.NET Webサイトを持っていますが、私は小さなファイルをアップロードすることができます(ただし、16kbは977になります)。大きなファイル(150kb)をアップロードすると、エラーリモートサーバーがエラーを返しました:(413)要求エンティティが大きすぎます。私はアップロードできるコンテンツの最大サイズを増やしましたが、私が必要としていることをすべて読んだ限り、だから私は2つの質問があると思います:WCFアップロードファイルリモートサーバーがエラーを返しました:(413)要求エンティティが大きすぎます

  1. なぜ私はそれを送信した後にファイルが大きくなりますか?
  2. なぜこのエラーが発生することなく大きなファイルを送信できないのですか?

私のWebサービスは罰金が、ここでそれのためにあるが、コードは次のとおりです。

[OperationContract] 
[WebInvoke(Method = "POST", UriTemplate = "FileUpload/{fileName}")] 
void FileUpload(string fileName, Stream fileStream); 

    public void FileUpload(string fileName, Stream fileStream) 
    { 
       FileStream fileToupload = new FileStream("C:\\" + fileName, FileMode.Create); 

     byte[] bytearray = new byte[1000000]; 
     int bytesRead, totalBytesRead = 0; 
     do 
     { 
      bytesRead = fileStream.Read(bytearray, 0, bytearray.Length); 
      totalBytesRead += bytesRead; 
     } while (bytesRead > 0); 

     fileToupload.Write(bytearray, 0, bytearray.Length); 
     fileToupload.Close(); 
     fileToupload.Dispose(); 
    } 

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
     <binding name="uploadfilebinding" closeTimeout="10:01:00" 
      maxBufferSize="204857600" maxBufferPoolSize="204857600" 
      maxReceivedMessageSize="104857600" openTimeout="10:01:00" 
      receiveTimeout="10:10:00" sendTimeout="10:01:00" 
      messageEncoding="Mtom" transferMode="StreamedRequest"> 
      <readerQuotas maxDepth="204857600" maxStringContentLength="204857600" 
          maxArrayLength="204857600" maxBytesPerRead="204857600" 
          maxNameTableCharCount="204857600" /> 
     </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service name="sUploadFile.UploadFile" 
      behaviorConfiguration="uploadfilebehavior"> 
     <endpoint 
       address="" 
       binding="basicHttpBinding" 
       bindingConfiguration="uploadfilebinding" 
       contract="sUploadFile.UploadFile"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint 
       address="mex" 
       binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

<behaviors> 
     <serviceBehaviors> 
      <behavior name=""> 
       <serviceMetadata httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
     <behavior name="uploadfilebehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 

    </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> 
</system.serviceModel> 

を次のように私のweb.configファイルがあると私はそれをキャリンよ

string baseServiceAddress = "http://" + Environment.MachineName + ":8000/suploadfile.svc/FileUpload"; 
ServiceHost host = new ServiceHost(typeof(sUploadFile), new Uri(baseServiceAddress)); 
host.AddServiceEndpoint(typeof(IsUploadFile), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior()); 
host.Open(); 

byte[] bytearray=null ; 
     string name = ""; 
    //throw new NotImplementedException(); 
    if (FileUpload1.HasFile) 
    { 
     name = FileUpload1.FileName; 
     Stream stream = FileUpload1.FileContent; 
     stream.Seek(0, SeekOrigin.Begin); 
     bytearray = new byte[stream.Length]; 
     int count = 0; 
     while (count < stream.Length) 
     { 
      bytearray[count++] = Convert.ToByte(stream.ReadByte()); 
     } 

    } 

    string baseAddress = "http://" + Environment.MachineName + ":8000/suploadfile.svc/FileUpload/"; 
    HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(baseAddress+name);   
    request.Method = "POST"; 
    request.ContentType = "text/plain"; 
    try 
    { 
     Stream serverStream = request.GetRequestStream(); 
     serverStream.Write(bytearray, 0, bytearray.Length); 
     serverStream.Close(); 
     using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
     { 
      int statusCode = (int)response.StatusCode; 
      StreamReader reader = new StreamReader(response.GetResponseStream()); 

     } 
    } 
    catch (Exception ess) 
    { 
    } 

} 

答えて

3

変更

byte[] bytearray = new byte[1000000]; 

へ:

byte[] bytearray = new byte[fileSize+1]; 
関連する問題