2017-11-06 7 views
0

ファイルをアップロードするためにRESTサービスを作成しました。問題があるようです。私が使用してファイルをアップロードしようとするたびに、それは私にエラーを与えてテストコンソールアプリケーションは、下記:C#でファイルをアップロードするためのRESTサービスの作成

An unhandled exception of type 'System.Net.WebException' occurred in System.dll

Additional information: The remote server returned an error: (400) Bad Request.

コード - IFileUploaderService

[OperationContract] 
    [WebInvoke(Method = "POST", 
     UriTemplate = "/UploadImage", 
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json)] 
    void FileUpload(Stream stream); 

コード - FileUploaderService.svc.csを

public void FileUpload(Stream stream) 
    { 
     string FilePath = Path.Combine(HostingEnvironment.MapPath("~/FileServer/Uploads"), "1.txt"); 

     int length = 0; 
     using (FileStream writer = new FileStream(FilePath, FileMode.Create)) 
     { 
      int readCount; 
      var buffer = new byte[8192]; 
      while ((readCount = stream.Read(buffer, 0, buffer.Length)) != 0) 
      { 
       writer.Write(buffer, 0, readCount); 
       length += readCount; 
      } 
     } 
    } 

Web.Config

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5.1" /> 
    <httpRuntime targetFramework="4.5.1"/> 
    </system.web> 
    <system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding name="UploaderService.FileUploaderService" maxBufferSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       transferMode="Streamed" 
       sendTimeout="00:05:00"> 
      <readerQuotas maxDepth="2147483647" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647"/> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Windows"></transport> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <services> 
     <service name="UploaderService.FileUploaderService" behaviorConfiguration="UploaderService.FileUploaderService"> 
     <endpoint address="" binding="webHttpBinding" contract="UploaderService.IFileUploaderService" behaviorConfiguration="web"> 
     </endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="UploaderService.FileUploaderService"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 
</configuration> 
ファイルアップロードする

コンソールアプリケーション:

static void Main(string[] args) 
    { 

     System.Uri url = new System.Uri("http://localhost:8082/FileUploaderService.svc/uploadimage"); 
     string filePath = @"C:\test.jpg"; 



     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Accept = "application/octet-stream"; 
     request.Method = "POST"; 
     request.ContentType = "image/jpeg"; 
     using (Stream fileStream = File.OpenRead(filePath)) 
     using (Stream requestStream = request.GetRequestStream()) 
     { 
      int bufferSize = 1024; 
      byte[] buffer = new byte[bufferSize]; 
      int byteCount = 0; 
      while ((byteCount = fileStream.Read(buffer, 0, bufferSize)) > 0) 
      { 
       requestStream.Write(buffer, 0, byteCount); 
      } 
     } 
     string result; 
     using (WebResponse response = request.GetResponse()) 
     using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
     { 
      result = reader.ReadToEnd(); 
     } 
     Console.WriteLine(result); 
    } 

を私は他の場所に記載されたソリューションを見てきましたが、それは働いていません。私は何が間違っているのだろうと思っているので、誰かが私にこれを助けることができますか?

答えて

0

追加:この行の前に

requestStream.Close(); 

string result; 

これは、ストリームがフラッシュする原因となります。

関連する問題