2014-04-17 2 views
3

POST를 사용하여 내 사이트에 이미지를 업로드하려고 시도했지만 이미지가 전송되어 base64로 변환됩니다.Silverlight, PostAsync가 응답을 반환하지 않습니다.

불행히도 Siverlight 응용 프로그램에서 오류가 발생했습니다. 나는 성공적으로 이미지의 base64로 문자열을 늘어 놓던 지금은 업로드 할이 내가 POST 요청을 수행하는 데 사용하는 코드입니다 : 두 번째 줄이 실행 중일 때

HttpClient hc = new HttpClient(); 
HttpResponseMessage response = hc.PostAsync("http://mywebsite.com/service.php", new StringContent("image=" + base64)).Result; 
if (response.IsSuccessStatusCode) 
{ 
    MessageBox.Show("Uploaded."); 
} 

아무런 변화가 없다가, 그냥 일시 정지 완전히, 제 3의 선에 결코 결코 뛰어 오르지 않는다.

Cannot await 'System.Threading.Tasks.Task System.Net.Http.HttpResponseMessage>'

나는 또한 실버에까지 확인 한 : 그것은 나에게 오류를 제공

var response = await hc.PostAsync("http://mywebsite.com/kurv.php", new StringContent("image=" + base64)); 

: 그것은 비동기있어 이후

, 나는 I가 라인을 변경, await 앞에 추가한다고 것을 생각 Silverlight는 허용되지 않는 사이트에 액세스 할 수 없다고 말합니다. 따라서 내 사이트 (http://mywebsite.com/)의 루트에 clientaccesspolicy.xml 및 crossdomain.xml의 두 파일을 추가했습니다.

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
     <policy> 
      <allow-from http-request-headers="*"> 
       <domain uri="*"/> 
      </allow-from> 
      <grant-to> 
       <resource path="/" include-subpaths="true"/> 
      </grant-to> 
     </policy> 
    </cross-domain-access> 
</access-policy> 

crossdomain.xml은 다음과 같습니다 :

clientaccesspolicy.xml

은 다음과 같습니다

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-http-request-headers-from domain="*" headers="*"/> 
</cross-domain-policy> 

물론 이것은 안전하지 않은,하지만 난 단지 테스트 권리의 saking이 사용하고 이제 실버 라이트 애플리케이션을 작동 시키십시오.

+0

비동기를 사용하려면 Microsoft.Bcl.Async를 추가하십시오. SL에서 작동하는지 확실하지 않습니다. –

답변

0

기다림, 사용하지 마십시오. ContinueWith, 아래 내용을 참조하십시오. Silverlight는 블로킹 작업에 좋지 않습니다.

HttpClient client = new HttpClient(); 
     client.BaseAddress = new Uri("http://localhost/myproject/"); 

     // Add an Accept header for JSON format. 
     client.DefaultRequestHeaders.Accept.Add(
      new MediaTypeWithQualityHeaderValue("application/json")); 

     var t = client.GetAsync("api/values"); 
     t.ContinueWith(p => 
     { 
      if (p.Result.IsSuccessStatusCode) 
      { 
       var users = p.Result.Content.ReadAsByteArrayAsync().Result; 
       if (users != null) 
       { 

       } 

      } 

     }); 
관련 문제