如何运行异步短信服务?
How to run asynchronously an SMS service?
我要测试如下所示的短信服务,但我希望它 运行 异步。我准备了如下代码,但我怎样才能让它像 async-await 一样工作?
private async void Form1_Load(object sender, EventArgs e)
{
var url = "http://panel.com/smsgonder1Npost.php";
//string tur = "Normal";
//if (turkce.Checked == true) tur = "Turkish";
string sms1N = "data=<sms><kno>" + kno.Text + "</kno>" +
"<kulad>" + kad.Text + "</kulad>" +
"<sifre>" + ksifre.Text + "</sifre>" +
"<gonderen>" + "SMS TEST" + "</gonderen>" +
"<mesaj>" + "test message" + "</mesaj>" +
"<numaralar>" + "number" + "</numaralar>" +
"<tur>" + "Normal" + "</tur></sms>";
await XmlPost(PostAddress: url, xmlData: sms1N);
}
private async Task<string> XmlPost(string PostAddress, string xmlData)
{
using (WebClient wUpload = new WebClient())
{
wUpload.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
textBox1.AppendText(xmlData);
Byte[] bPostArray = Encoding.UTF8.GetBytes(xmlData);
Byte[] bResponse = wUpload.UploadData(PostAddress, "POST", bPostArray);
Char[] sReturnChars = Encoding.UTF8.GetChars(bResponse);
string sWebPage = new string(sReturnChars);
textBox1.AppendText(sWebPage);
return sWebPage;
}
}
添加了新的
嗨,我在下面添加了新代码。它像 httpClient 一样工作吗?
或者你能举个httpClient的例子吗?
public async string postXMLData(string destinationUrl, string requestXml)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
string responseStr = new StreamReader(responseStream).ReadToEnd();
textBox1.AppendText(responseStr);
return responseStr;
}
return null;
}
how can I make it work as async-await
将 WebClient
替换为 HttpClient
。
HttpClient 有(只有)异步方法。 WebClient 是同步的。
附带说明,don't use using
与 HttpClient。
对代码的一个简单更改是使用 WebClient.UploadDataTaskAsync
Method.
WebClient
,在 .NET Framework 1.1 中引入,自 .NET Framework 2.0 以来一直是异步的。
使用 Event-based Asynchronous Pattern (EAP)(Async
后缀方法)是异步的。
自 .NET Framework 4.5 起,它已通过 Task-based asynchronous pattern (TAP)(TaskAsync
后缀的方法)进行了扩充。
您可以看到 here 如何 WebClient.UploadDataTaskAsync
使用
WebClient.UploadDataAsync
.
我要测试如下所示的短信服务,但我希望它 运行 异步。我准备了如下代码,但我怎样才能让它像 async-await 一样工作?
private async void Form1_Load(object sender, EventArgs e)
{
var url = "http://panel.com/smsgonder1Npost.php";
//string tur = "Normal";
//if (turkce.Checked == true) tur = "Turkish";
string sms1N = "data=<sms><kno>" + kno.Text + "</kno>" +
"<kulad>" + kad.Text + "</kulad>" +
"<sifre>" + ksifre.Text + "</sifre>" +
"<gonderen>" + "SMS TEST" + "</gonderen>" +
"<mesaj>" + "test message" + "</mesaj>" +
"<numaralar>" + "number" + "</numaralar>" +
"<tur>" + "Normal" + "</tur></sms>";
await XmlPost(PostAddress: url, xmlData: sms1N);
}
private async Task<string> XmlPost(string PostAddress, string xmlData)
{
using (WebClient wUpload = new WebClient())
{
wUpload.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
textBox1.AppendText(xmlData);
Byte[] bPostArray = Encoding.UTF8.GetBytes(xmlData);
Byte[] bResponse = wUpload.UploadData(PostAddress, "POST", bPostArray);
Char[] sReturnChars = Encoding.UTF8.GetChars(bResponse);
string sWebPage = new string(sReturnChars);
textBox1.AppendText(sWebPage);
return sWebPage;
}
}
添加了新的 嗨,我在下面添加了新代码。它像 httpClient 一样工作吗? 或者你能举个httpClient的例子吗?
public async string postXMLData(string destinationUrl, string requestXml)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
string responseStr = new StreamReader(responseStream).ReadToEnd();
textBox1.AppendText(responseStr);
return responseStr;
}
return null;
}
how can I make it work as async-await
将 WebClient
替换为 HttpClient
。
HttpClient 有(只有)异步方法。 WebClient 是同步的。
附带说明,don't use using
与 HttpClient。
对代码的一个简单更改是使用 WebClient.UploadDataTaskAsync
Method.
WebClient
,在 .NET Framework 1.1 中引入,自 .NET Framework 2.0 以来一直是异步的。
使用 Event-based Asynchronous Pattern (EAP)(Async
后缀方法)是异步的。
自 .NET Framework 4.5 起,它已通过 Task-based asynchronous pattern (TAP)(TaskAsync
后缀的方法)进行了扩充。
您可以看到 here 如何 WebClient.UploadDataTaskAsync
使用
WebClient.UploadDataAsync
.