2016-03-29 11 views
2

私はPostAsync()を使用してデータを送信し、コードは正確に実行されます。データを送信するサイトには、成功または失敗を通知する応答通知がXMLで提供されます。 XML応答はとても似ている: 非成功これは<error>タグPostAsync()からXML応答を読み取る

<?xml version="1.0" encoding="utf-8" ?> 
<result> 
<success>0</success> 
<iploadid/> 
<errors> 
    <error>File is not in correct format</error> 
</errors> 
</result> 

間の理由を返しながら成功しポストは1

<?xml version="1.0" encoding="utf-8" ?> 
<result> 
<success>1</success> 
<uploadid/> 
</errors> 
</result> 

を返します私のを実行するために使用しているC#の構文3210ページからXMLの回答を読むには、何を追加する必要がありますか?

private void SendAsyncData() 
{ 
    string connectionString = "Data Source=hmod;Initial Catalog=salesdb;uid=userid;password=password;MultipleActiveResultSets=True"; 
    DataTable grds = new DataTable(); 
    using (var con = new SqlConnection(connectionString)) 
    using (var cmd = new SqlCommand("procedureone", con)) 
    using (var da = new SqlDataAdapter(cmd)) 
    { 
    cmd.CommandType = CommandType.StoredProcedure; 
    da.Fill(grds); 
    } 
    var client = new HttpClient(); 
    var q = string.Empty; 
    foreach (DataRow row in grds.Rows) 
    { 
    var parameterSet = new List<KeyValuePair<string, string>>(); 
    for (int i = 0; i < grds.Columns.Count; ++i) 
    { 
     parameterSet.Add(new KeyValuePair<string, string>(grds.Columns[i].ColumnName, row[i].ToString())); 

    } 

    var result = client.PostAsync("http://weneedsampledata/ashx", new FormUrlEncodedContent(parameterSet)).Result; 
    string resultContent = result.Content.ReadAsStringAsync().Result; 
    } 
} 

EDIT
は現在、この構文は、データを受信するサイトは、エラーをスローした場合でも200(成功)のコードを返し、私はデータかどうかを判断するためにXML応答を「読み」の方法が必要です実際に成功したかどうかはわかりません。私は応答を読み取るために以下を追加しようとしましたが、それは私のコンパイルエラーを与える:

「System.Net.Http.HttpResponseMessageは」 '「のGetResponse」の定義なし拡張メソッドが含まれていませんGetResponse見つけることができSystem.Net.Http.HttpResponseMessage '」は、タイプの最初の引数を受け入れる'(あなたがusingディレクティブまたはアセンブリ参照が不足している?)

var response = result.GetResponse(); 
Stream receiveStream = response.GetResponseStream(); 
StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
var postresult = readStream.ReadToEnd(); 
var xml = System.Xml.Linq.XElement.Parse(postresult); 
if (xml.Elements("success").FirstOrDefault().Value == "1") 
{ 
    lblgoodbad.Text = "It was good."; 
} 
else 
{ 
    var errors = xml.Elements("errors"); 
    foreach (var error in errors.Elements("error")) 
    { 
    lblgoodbad.Text = error.Value; 
    } 
} 

EDIT#2
感謝@Husseyの助けを借りて私の構文を微調整して、それが必要なように機能しています。私の完全な構文は、このようなように読み取ります

private void SendAsyncData() 
{ 
    string connectionString = "Data Source=hmod;Initial Catalog=salesdb;uid=userid;password=password;MultipleActiveResultSets=True"; 
    DataTable grds = new DataTable(); 
    using (var con = new SqlConnection(connectionString)) 
    using (var cmd = new SqlCommand("procedureone", con)) 
    using (var da = new SqlDataAdapter(cmd)) 
    { 
    cmd.CommandType = CommandType.StoredProcedure; 
    da.Fill(grds); 
    } 
    var client = new HttpClient(); 
    var q = string.Empty; 
    foreach (DataRow row in grds.Rows) 
    { 
    var parameterSet = new List<KeyValuePair<string, string>>(); 
    for (int i = 0; i < grds.Columns.Count; ++i) 
    { 
     parameterSet.Add(new KeyValuePair<string, string>(grds.Columns[i].ColumnName, row[i].ToString())); 

    } 

    var result = client.PostAsync("http://weneedsampledata/ashx", new FormUrlEncodedContent(parameterSet)).Result; 
    string resultContent = result.Content.ReadAsStringAsync().Result; 
    var xml = System.Xml.Linq.XElement.Parse(resultContent); 
    if (xml.Elements("success").FirstOrDefault().Value == "1") 
    { 
     lblgoodbad.Text = "It was good."; 
    } 
    else 
    { 
     var errors = xml.Elements("errors"); 
     foreach (var error in errors.Elements("error")) 
     { 
     lblgoodbad.Text = error.Value; 
     } 
    } 
    } 
} 

答えて

1

この行を追加してみてくださいでした:

をこの行の後に:

XElement incomingXml = XElement.Parse(resultContent); 

それとも:

string resultContent = result.Content.ReadAsStringAsync().Result; 

これを追加しますReadAsStreamAsyncでこのオプションを試して、ストリームをXmlDocumentに読み込むこともできます。

string resultContent = result.Content.ReadAsStreamAsync().Result; 

XDocument incomingXml = XDocument.Load(resultContent); 
+0

XElementの使用incomingXml = XElement.Parse(resultContent);ラベルに書き込むためにxml.Elementを解析するにはどうすればよいですか? – NadineSmithJonesPicard

+0

属性値は、次のように名前で取得できます。var errorName = incomingXml.Attribute( "error")。 – Husein

+0

それは私にエラーを(もしあれば)与えるだろう - どのように成功(またはxml = 1)だったかわかります – NadineSmithJonesPicard

関連する問題