2009-09-22 10 views
7

Burada yapmaya çalıştığım şey, web sitesivce'yi xml verileriyle Rest istendiğinde yayınlama isteğidir. Rest Webserivce'i bir gönderi yöntemiyle nasıl ararım ve xml verilerini gönderirim? C#

bu

ben şu anda ne var ama benim xml verileri aktarmak için nasıl emin değilim

  XElement xml = new XElement("MatchedOptions", 
       from m in _matchedOptionsList 
       select new XElement("Listing", 
         new XElement("DomainID", _trafficCopInputs.DomainID), 
         new XElement("AdSource", _trafficCopInputs.AdSource), 
         new XElement("Campaign", _trafficCopInputs.Campaign), 
         new XElement("AdGroup", _trafficCopInputs.AdGroup), 
         new XElement("RedirectURL", m.RedirectPath), 
         new XElement("FunnelKeyword", m.FunnelKeyword))); 

      HttpWebRequest req = WebRequest.Create("http://something.com/") 
       as HttpWebRequest; 


      req.Method = "POST"; 
      req.ContentType = "text/xml"; 
      req.ContentLength = 0; 
      StreamWriter writer = new StreamWriter(req.GetRequestStream()); 
      writer.WriteLine(xml.ToString()); 

cevap

5

temelden yanlış bir şey sizin ne var' Yapıyorsunuz, ancak istek akış yazıcısını temizlemeniz/kapatmanız gerekiyor. Bu kolayca ayrıca yazar elden çıkararak using yapı ile yapılabilir onu temizler:

req.GetResponse() 

(HttpWebResponse dönen unutmayın:

using (StreamWriter writer = new StreamWriter(req.GetRequestStream())) 
{ 
    writer.WriteLine(xml.ToString()); 
} 

Daha sonra aslında isteği yürütmek için GetResponse çağırmanız gerekir Bu aynı zamanda tek kullanımlıktır, bu yüzden onu da atmayı unutmayın.)

6

Ben WebClient sınıfı kullanın:

WebClient webClient = new WebClient(); 
using (webClient) 
{ 
    requestInterceptor.OnRequest(webClient); 
    var enc = new ASCIIEncoding(); 
    return enc.GetString(webClient.UploadData(uri, enc.GetBytes(dataAsString))); 
} 
+8

WebClient'i kullanım ifadesinin en üstünde tanımlamayı öneririm. Böylelikle webClient ismi kullanım bloğu için yereldir ve imha edildikten sonra webClient üzerinde arama yöntemleri riski yoktur. – ctford