using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
namespace 發送xml
{
class Program
{
static void Main(string[] args)
{
//這是我需要發送的地址,我在http://localhost:6930/ajax/Receiveresponse需要接受到xml資料然後進行相應的處理。
string url2 = "http://localhost:6930/ajax/Receiveresponse";
//讀取xml檔案內容
FileStream fs = new FileStream(@"d:/test1.xml", FileMode.Open);
string xml="";
using (StreamReader sr = new StreamReader(fs))
{
xml = sr.ReadToEnd();
}
Console.WriteLine(PostData(url2, xml));
Console.ReadKey();
}
public static string PostData(string purl, string str)
{
try
{
byte[] data = System.Text.Encoding.GetEncoding("GB2312").GetBytes(str);
// 準備請求
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(purl);
//設定逾時
req.Timeout = 30000;
req.Method = "Post";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = data.Length;
Stream stream = req.GetRequestStream();
// 發送資料
stream.Write(data, 0, data.Length);
stream.Close();
HttpWebResponse rep = (HttpWebResponse)req.GetResponse();
Stream receiveStream = rep.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("UTF-8");
// Pipes the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader(receiveStream, encode);
Char[] read = new Char[256];
int count = readStream.Read(read, 0, 256);
StringBuilder sb = new StringBuilder("");
while (count > 0)
{
String readstr = new String(read, 0, count);
sb.Append(readstr);
count = readStream.Read(read, 0, 256);
}
rep.Close();
readStream.Close();
return sb.ToString();
}
catch (Exception ex)
{
return "";
// ForumExceptions.Log(ex);
}
}
}
}
在另一個頁面接受xml資料。我的xml檔案格式如下
<?xml version="1.0" encoding="gb2312" ?>
<SBMP_MO_MESSAGE>
<CONNECT_ID>100</CONNECT_ID>
<MO_MESSAGE_ID>123456</MO_MESSAGE_ID>
<RECEIVE_DATE>20040605</RECEIVE_DATE>
<RECEIVE_TIME>153020</RECEIVE_TIME>
<GATEWAY_ID>1</GATEWAY_ID>
<VALID>1</VALID>
<CITY_CODE>010</CITY_CODE>
<CITY_NAME>北京</CITY_NAME>
<STATE_CODE>010</STATE_CODE>
<STATE_NAME>北京</STATE_NAME>
<TP_PID>0</TP_PID>
<TP_UDHI>0</TP_UDHI>
<MSISDN>18801372511</MSISDN>
<MESSAGE_TYPE>8</MESSAGE_TYPE>
<MESSAGE>801963</MESSAGE>
<LONG_CODE>100</LONG_CODE>
<SERVICE_CODE>9588</SERVICE_CODE>
</SBMP_MO_MESSAGE>
public ActionResult Receiveresponse()
{
string Result = "Ok";
//擷取xml檔案的輸入資料流
Stream inputStream = Request.InputStream;
//定義位元組數組
byte[] b = new byte[inputStream.Length];
//將輸入資料流讀入位元組數組
inputStream.Read(b, 0, (int)inputStream.Length);
//將位元組數群組轉換為經過編碼的字串
//string inputStr = System.Text.Encoding.UTF8.GetString(b);
string inputStr = System.Text.Encoding.Default.GetString(b);
Response.Write("ok"); //先返回ok告知簡訊業務平台已經接收到訊息 然後再對此訊息做非同步處理
Result = ReceiveDataFromWapdm(inputStr);
return Content(Result);
}
private string ReceiveDataFromWapdm(string input)
{
string str = "ok";
try
{
//建立XmlDocument執行個體
XmlDocument x = new XmlDocument();
//載入 XML
x.LoadXml(input);
//擷取根節點的名字
string name = x.DocumentElement.LocalName;
//判斷擷取的資訊是否是mo訊息
if (name.Equals("SBMP_MO_MESSAGE"))
{
ReceiveMoMessageClass m = new ReceiveMoMessageClass();
//擷取SBMP_MO_MESSAGE
XmlNode node = x.SelectSingleNode("SBMP_MO_MESSAGE");
//以下是分析位元組點
m.ConnectID = int.Parse(node.ChildNodes[0].InnerText);
m.MoMessageID = node.ChildNodes[1].InnerText;
m.ReceiveDate = node.ChildNodes[2].InnerText;
m.ReceiveTime = node.ChildNodes[3].InnerText;
m.GatewayID = int.Parse(node.ChildNodes[4].InnerText);
m.Valid = int.Parse(node.ChildNodes[5].InnerText);
m.CityCode = node.ChildNodes[6].InnerText;
m.CityName = node.ChildNodes[7].InnerText;
m.StateCode = node.ChildNodes[8].InnerText;
m.StateName = node.ChildNodes[9].InnerText;
m.TpPid = int.Parse(node.ChildNodes[10].InnerText);
m.TpUdhi = int.Parse(node.ChildNodes[11].InnerText);
m.Msisdn = node.ChildNodes[12].InnerText;
m.MessageType = int.Parse(node.ChildNodes[13].InnerText);
m.Message = node.ChildNodes[14].InnerText;
m.LongCode = node.ChildNodes[15].InnerText;
m.ServiceCode = node.ChildNodes[16].InnerText;
//在這裡最好將擷取的資料交給線程處理
Thread thread = new Thread(Run);
thread.IsBackground = true;
thread.Start(m);
//返回ok
}
else if (name.Equals("SBMP_REPORT_MESSAGE"))
{
}
//............
}
catch (Exception ex)
{
str = "false";
Console.WriteLine(ex.ToString());
}
return str;
}
/// <summary>
/// 簡訊上行資訊類
/// </summary>
public class ReceiveMoMessageClass
{
private int _connectID = -1, _gatewayID = -1, _valid = -1, _tpPid = -1, _tpUdhi = -1,
_messageType = -1;
private string _moMessageID = "", _receiveTime = "", _receiveDate = "", _cityCode = "",
_cityName = "", _stateCode = "", _stateName = "", _msisdn = "", _message = "",
_longCode = "", _serviceCode = "";
/// <summary>
/// 訊息類型
/// </summary>
public int MessageType
{
get { return _messageType; }
set { _messageType = value; }
}
/// <summary>
/// 簡訊業務平台接收到此MO訊息的日期
/// </summary>
public string ReceiveDate
{
get { return _receiveDate; }
set { _receiveDate = value; }
}
/// <summary>
/// GSM協議
/// </summary>
public int TpUdhi
{
get { return _tpUdhi; }
set { _tpUdhi = value; }
}
/// <summary>
/// GSM協議
/// </summary>
public int TpPid
{
get { return _tpPid; }
set { _tpPid = value; }
}
/// <summary>
/// 此手機號碼是否有效,0:無效,1:有效。
/// 無效的含義是此手機號碼不在簡訊業務平台的號段內或者所屬號段無效,此時使用此手機號碼下發任何資訊均失敗。
/// 有效含義是此手機號碼在簡訊業務平台的號段內並且號段的狀態為有效。
/// </summary>
public int Valid
{
get { return _valid; }
set { _valid = value; }
}
/// <summary>
/// 此MO訊息是從哪個網關轉寄過來的
/// </summary>
public int GatewayID
{
get { return _gatewayID; }
set { _gatewayID = value; }
}
/// <summary>
/// 此MO資訊是哪個串連標識的
/// </summary>
public int ConnectID
{
get { return _connectID; }
set { _connectID = value; }
}
/// <summary>
/// 使用者發送此MO訊息時的特符號
/// </summary>
public string ServiceCode
{
get { return _serviceCode; }
set { _serviceCode = value; }
}
/// <summary>
/// 使用者發送此MO訊息時的長號碼
/// </summary>
public string LongCode
{
get { return _longCode; }
set { _longCode = value; }
}
/// <summary>
/// 訊息內容
/// </summary>
public string Message
{
get { return _message; }
set { _message = value; }
}
/// <summary>
/// 發送此MO資訊的手機號碼
/// </summary>
public string Msisdn
{
get { return _msisdn; }
set { _msisdn = value; }
}
/// <summary>
/// 手機號碼所在省的名稱,如果lValid為0,那麼此值為空白。
/// </summary>
public string StateName
{
get { return _stateName; }
set { _stateName = value; }
}
/// <summary>
/// 手機號碼所在省的區號,如果lValid為0,那麼此值為空白。
/// </summary>
public string StateCode
{
get { return _stateCode; }
set { _stateCode = value; }
}
/// <summary>
/// 手機號碼所在城市的名稱,如果lValid為0,那麼此值為空白。
/// </summary>
public string CityName
{
get { return _cityName; }
set { _cityName = value; }
}
/// <summary>
/// 手機號碼所在城市的區號,如果lValid為0,那麼此值為空白。
/// </summary>
public string CityCode
{
get { return _cityCode; }
set { _cityCode = value; }
}
/// <summary>
/// 簡訊業務平台接收到此MO訊息的時間
/// </summary>
public string ReceiveTime
{
get { return _receiveTime; }
set { _receiveTime = value; }
}
/// <summary>
/// MO訊息ID
/// </summary>
public string MoMessageID
{
get { return _moMessageID; }
set { _moMessageID = value; }
}
}