2012-11-07 2 views
0

나는 실버 라이트 4에서 wcf 휴식 서비스에 이미지를 게시하려고하지만 요청에서 공감을 받으면 예외가 발생합니다. 예외는System.Net.WebException : 원격 서버에서 NotFound 오류를 반환했습니다. ---> 실버 라이트 파일 게시 WCF 휴식 서비스

시스템입니다. .Net.WebException : 원격 서버가 NotFound 오류를 반환했습니다. ---> System.Net.WebException : 원격 서버 오류를 반환했습니다 : NotFound. at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse (IAsyncResult asyncResult) at System.Net.Browser.BrowserHttpWebRequest. <> c_ DisplayClassa.b _9 (Object sendState) at System.Net.Browser.AsyncHelper. <> C_ DisplayClass4.b _1 (sendState 개체) 내부 예외 스택 추적 --- --- 끝에서 System.Net.Browser.AsyncHelper.BeginOnUI (SendOrPostCallback beginMethod, 객체 상태)에서 System.Net . 내가 안드로이드에서 액세스하려고 할 때 Admin.Popups.AddCategory.OnImageGetResponseCompleted에서 Browser.BrowserHttpWebRequest.EndGetResponse (IAsyncResult를 asyncResult) (IAsyncResult를 아칸소는)} 서비스에

내 다른 모든 기능, 심지어 이것을 잘 작동 나는 이미 모양을 가지고 실버 도메인 간 정책을 시도했지만 해당 코드가 적용되지 않는다고 생각합니다.

private void UpLoadImage() 
     { 
      string URL = Utilities.GetServiceUrl() + "AddCategoryImage?CategoryId=2&ContentType=image&apikey=" + Utilities.GetApiKey(); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); 
      request.Method = "POST"; 
      request.ContentType = "text/plain"; 
      request.ContentLength = SelectedFile.Length; 

      request.BeginGetRequestStream(OnImageGetRequestStreamCompleted, request); 
     } 

     private void OnImageGetRequestStreamCompleted(IAsyncResult ar) 
     { 
      try 
      { 
       if (SelectedFile != null) 
       { 
        HttpWebRequest request = (HttpWebRequest)ar.AsyncState; 

        using (Stream postStream = request.EndGetRequestStream(ar)) 
        { 
         using (Stream source = SelectedFile.OpenRead()) 
         { 
          byte[] buffer = new byte[2048]; 
          int bytesRead; 
          while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) 
          { 
           postStream.Write(buffer, 0, bytesRead); 
          } 
         } 

        } 

        request.BeginGetResponse(new AsyncCallback(OnImageGetResponseCompleted), request); 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

     private void OnImageGetResponseCompleted(IAsyncResult ar) 
     { 
      try 
      { 
       HttpWebRequest request = (HttpWebRequest)ar.AsyncState; 
       HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar); 
       using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
       { 
        string result = sr.ReadToEnd(); 
       } 
      } 
      catch (Exception ex) 
      { 
       this.Dispatcher.BeginInvoke(delegate() 
         { 
          MessageBox.Show(ex.Message); 
         }); 
      } 
     } 

WCF 기능은

[OperationContract] 
     [WebInvoke(Method = "POST", UriTemplate = "AddCategoryImage?CategoryId={CategoryId}&ContentType={ContentType}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
     bool AddCategoryImage(int CategoryId, string ContentType, Stream Image); 

과 기능 구현 내가 WCF는 maxReceivedMessageSize는 65K이며, 내가 영리, 65K보다 더 나 파일을 업로드하려고했다 만들면 기본적 문제를 해결 한

public static bool AddCategoryImage(int CategoryId, string ContentType,Stream Image) 
     { 
      SqlConnection sqlCon = new SqlConnection(Params.GetConnectionString()); 
      SqlCommand sqlCmd = new SqlCommand("UPDATE Categories SET Cat_Img = @Cat_Img,Cat_Img_Type = @Cat_Img_Type WHERE Cat_ID = @Cat_ID", sqlCon); 
      sqlCmd.Parameters.Add("@Cat_Img", SqlDbType.Image).Value = Utility.ConvertStreamToByteArray(Image); 
      sqlCmd.Parameters.Add("@Cat_Img_Type", SqlDbType.NVarChar, 32).Value = ContentType; 
      sqlCmd.Parameters.Add("@Cat_ID", SqlDbType.Int).Value = CategoryId; 

      try 
      { 
       sqlCon.Open(); 

       return sqlCmd.ExecuteNonQuery() > 0 ? true : false; 
      } 
      catch (Exception ex) 
      { 
       Error.CreateError(ex.Message, "Category.cs", "AddCategoryImg(int,string,Stream)"); 
      } 
      finally 
      { 
       sqlCon.Close(); 
      } 

      return false; 
     } 

답변

1

입니다 :) 그래서 maxReceivedMessageSize = "2000000"을 2MB로 설정했습니다. 이제 파일 크기가 2MB까지 작동합니다.

<binding name ="webBinding" sendTimeout="00:10:00" receiveTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00" maxReceivedMessageSize="2000000"> 
    <readerQuotas maxDepth="32" maxStringContentLength="100000000" maxArrayLength="100000000" maxBytesPerRead="100000000" maxNameTableCharCount="100000000" /> 
</binding>