2011-01-13 5 views
0

Silverlight에서 만들고있는 웹 클라이언트가 있습니다. GET 및 POST 요청과 JSON을 통해 내 서버에서 내 웹 서비스와 통신하도록하기 위해 노력하고 있습니다. GET 요청은 정상적으로 작동하며 Silverlight 끝에서 JSON을 구문 분석 할 수 있습니다. 그러나 POST 요청은 작동하지 않습니다. 서버는 POST 요청이 있음을 읽지 만 POST 배열은 비어 있습니다.JSON Silverlight에서 게시 한 데이터가 서버에 도달하지 않습니다.

Ive는 두 개의 코드를 사용하여 POST 요청을 보내려고했지만 동일한 응답이 발생했습니다. 즉 빈 배열입니다. 내가 시도

최초의 실버 코드이었다 : 나는 시도

public MainPage() 
    { 
     InitializeComponent(); 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://www.dipzo.com/game/services.php")); 
     request.Method = "POST"; 
     request.ContentType = "application/json"; 
     request.BeginGetRequestStream(new AsyncCallback(OnGetRequestStreamCompleted), request); 
    } 

    private void OnGetRequestStreamCompleted(IAsyncResult ar) 
    { 
     HttpWebRequest request = (HttpWebRequest)ar.AsyncState; 
     using (StreamWriter writer = new StreamWriter(request.EndGetRequestStream(ar))) 
     { 
      writer.Write("name=david"); 
     } 
     request.BeginGetResponse(new AsyncCallback(OnGetResponseCompleted), request); 
    } 

    private void OnGetResponseCompleted(IAsyncResult ar) 
    { 
     //this.GetResponseCoimpleted.Visibility = Visibility.Visible; 

     // Complete the Flickr request and marshal to the UI thread 
     using (HttpWebResponse response = (HttpWebResponse)((HttpWebRequest)ar.AsyncState).EndGetResponse(ar)) 
     { 
      using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
      { 
       string results = reader.ReadToEnd(); 
      } 
     } 
    } 

두 번째 조각이었다

private void WebClient_Click(object sender, RoutedEventArgs e) 
    { 
     Test t1 = new Test() { Name = "Civics", Marks = 100 }; 
     DataContractJsonSerializer jsondata = new DataContractJsonSerializer(typeof(Test)); 
     MemoryStream mem = new MemoryStream(); 
     jsondata.WriteObject(mem, t1); 
     string josnserdata = Encoding.UTF8.GetString(mem.ToArray(), 0, (int)mem.Length); 
     WebClient cnt = new WebClient(); 
     cnt.UploadStringCompleted += new UploadStringCompletedEventHandler(cnt_UploadStringCompleted); 
     cnt.Headers["Content-type"] = "application/json"; 
     cnt.Encoding = Encoding.UTF8; 
     cnt.UploadStringAsync(new Uri("http://www.dipzo.com/game/services.php"), "POST", josnserdata); 
    } 

    void cnt_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) 
    { 
     var x = e; 
    } 

서비스가 PHP이며 본질적으로 소비 할 수있는 서버의 코드 : var_dump ($ _ POST)

포스트 배열에 들어오는 모든 내용을 출력해야합니다. 간단한 PHP 클라이언트로 테스트 해봤는데 작동합니다. 그냥 실버 라이트에서 작동하도록 할 수 없습니다. 실버 라이트에서는 빈 배열이 계속 나타납니다.

답변

1

당신은 콘텐츠 유형을 변경해야합니다 응용 프로그램 에/x-www-form-urlencoded를이 아닌 응용 프로그램/JSON 아직 알려진 유형이 아닙니다.

0

누군가는 여전히 자신의 오래된 질문에주의를 기울이고 있지만 실제로 문제는 서버에 도착했지만 서버가 결과를 SL 응용 프로그램에 다시 라우팅했기 때문입니다. 이것은 SL5 usingWebClient.UploadStringAsync와 비슷한 상황에서 보게되는 동작입니다.

저는 어제에 걸쳐 SL에서 동적으로 빌드 된 "실제"페이지 게시물을 사용하는 기술을 구현/테스트하려고합니다. 나는 곧 나의 발견을보고 할 것이다.

UPDATE는 -이 솔루션은 작동합니다 난 그냥 내 응용 프로그램 (MVC 내부 SL5)에서 테스트를했는데 그것을 잘 작동 http://www.codeproject.com/Tips/392435/Using-HTTP-Form-POST-method-to-pass-parameters-fro

. HttpContext.Request.Form [ "fieldname"]을 확인하여 원하는 값을 가져옵니다. 이 기술을 사용하여 JSON을 제출했으며 사용자에게 생성 된 Word 문서를 반환 할 수있었습니다.

일단 이것을 구현하면 이전에 사용하려고했던 불필요한 WebClient를 제거 할 수있었습니다.

관련 문제