2013-12-23 4 views
0

У меня есть список с двумя строками XML, здесь C# код:Как отправить 2 xml запрос на мыло?

string sb = ""; 
List<string> listGamme = new List<string>(); 
sb = ("<?xml....") ;//1st listGamme 
listGamme.Add(sb); 
sb = ("<?xml..."); //2nd listGamme 
listGamme.Add(sb); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("urlofmy.asmx"); 
req.Headers.Add("SOAPAction", "URLSOAPACTION"); 
req.ContentType = "text/xml;charset=\"utf-8\""; 
req.Accept = "text/xml"; 
req.Method = "POST"; 


       using (Stream stm = req.GetRequestStream()) 
       { 

        using (StreamWriter stmw = new StreamWriter(stm)) 
        { 
         foreach (string gamme in listGamme) 
          { 

           stmw.Write(gamme); 

          } 

        } 

       } 

    WebResponse response = req.GetResponse(); 
     StreamReader srreader = new StreamReader(response.GetResponseStream()); 

добавление Еогеасп внутри де второго используя дать мне ошибку 400 плохой запрос :), и если первая listGamme или второй listGamme «закомментируйте» код работает!, что не так в моем коде ???

+1

Есть ли какой-то причине вы не можете просто использовать «Add Service Reference»? См. Http://johnwsaunders3.wordpress.com/2009/05/17/how-to-consume-a-web-service/ –

ответ

2

Применить цикл в коде для отправки запроса один за другим. Вы не можете отправить оба запроса одновременно, если ваш wsdl не разрешает его.

Проверьте свой формат сообщения запроса в wsdl, принимает ли он запрос в виде списка строк, как вы определили в своем коде?

Для каждой строки в списке вашего повторе следующий код

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("urlofmy.asmx"); 

req.Headers.Add ("SOAPAction", "URLSOAPACTION"); req.ContentType = "text/xml; charset = \" utf-8 \ ""; req.Accept = "text/xml"; req.Method = "POST";

  using (Stream stm = req.GetRequestStream()) 
      { 

       using (StreamWriter stmw = new StreamWriter(stm)) 
       { 
        foreach (string gamme in listGamme) 
         { 

          stmw.Write(gamme); 

         } 

       } 

      } 

WebResponse response = req.GetResponse(); 
    StreamReader srreader = new StreamReader(response.GetResponseStream()); 

Также вы получите несколько ответов для каждого запроса xml.

Еще одна вещь - вы можете вставить свою структуру сообщений запроса из wsdl. Может быть, вы можете отправить несколько rquest в одном сообщении запроса (зависит от вашей структуры запроса WSDL messaage)

Отредактированный код:

string sb = ""; 
List<string> listGamme = new List<string>(); 
sb = ("<?xml....") ;//1st listGamme 
listGamme.Add(sb); 
sb = ("<?xml..."); //2nd listGamme 
listGamme.Add(sb); 

foreach (string gamme in listGamme) 
         { 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("urlofmy.asmx"); 
    req.Headers.Add("SOAPAction", "URLSOAPACTION"); 
    req.ContentType = "text/xml;charset=\"utf-8\""; 
    req.Accept = "text/xml"; 
    req.Method = "POST"; 


      using (Stream stm = req.GetRequestStream()) 
      { 

       using (StreamWriter stmw = new StreamWriter(stm)) 
       { 

          stmw.Write(gamme); 

       } 

      } 

    WebResponse response = req.GetResponse(); 
    StreamReader srreader = new StreamReader(response.GetResponseStream()); 
} 
+0

как применять цикл для отправки запроса один за другим? – user3030806

+0

Я получаю это сообщение _ ** System.ArgumentException: Stream не был доступен для записи ** _ – user3030806

+0

, пожалуйста, вставьте свой wsdl здесь. Мне нужно только запросить структуру сообщений. – kingAm

Смежные вопросы