2017-11-06 1 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; 

이 스트림이 플러시하게됩니다.

관련 문제