2016-04-05 13 views
1

VS2010'da yazılmış bir android uygulaması var, VS2012'ye aktarıyorum. WCF Restful web servisimle iletişim kurmak için HttpClient'i kullanmaya çalışıyorum. Web servisi bir XML web servisidir. Model nesnelerini XmlSerializer kullanarak bir bayt dizisine serileştiriyorum. HttpClient gönderme xml seri hale getirilmiş bayt dizisi

VS2010 ben başarıyla böyle WebClient'ı kullanın:
using (WebClient myWebClient = new WebClient()) 
{ 
    myWebClient.Headers.Add("Content-Type", "application/xml"); 
    myWebClient.UploadData(uri, postBytes); 
} 

Ancak HttpClient kullanarak aynı bayt dizisi göndermek için nasıl anlamaya olamaz.

[WebInvoke(Method="POST", RequestFormat=WebMessageFormat.Xml, 
          ResponseFormat=WebMessageFormat.Xml, 
          UriTemplate = "/Order.Xml/Process")] 
[XmlSerializerFormat] 

yanıtı 400 Geçersiz Request başka bir şey değildir:

var client = new HttpClient() 
client.DefaultRequestHeaders.Accept 
    .Add(new MediaTypeWithQualityHeaderValue("application/xml")); 

var content = new ByteArrayContent(postBytes); 
Task<HttpResponseMessage> task = client.PostAsync(uri,content); 
task.Wait(); 
HttpResponseMessage message = task.Result; 

webservice yöntemleri bu özelliklere sahiptir: İşte ben bugüne kadar ne var. Yayınlanan içeriğin doğru biçimlendirilmemiş gibi görünüyor. Ancak mevcut web servisiyle çalışmak için ne yapacağımı bilmiyorum. WebClient ile düzgün çalışıyor.

+0

Yani gerçek sunucu yerine xml gerçek tefrika nesnenin organı olarak bir bayt dizisi bekler:

aşağıdakileri deneyin? – Cheesebaron

+0

Web hizmeti bir Sipariş nesnesi bekliyor. Web servisi, bayt dizisini alma ve model nesnesine serileştirme işi yapar. –

cevap

1

'Content-Type' isteğinin 'Accept' başlığına "application/xml" ekliyorsunuz.

content.Headers.ContentType = new MediaTypeHeaderValue("application/xml"); 
+0

Teşekkürler. o oldu. –