我正在尝试向我的 BlackBerry 应用程序发送推送消息。php
黑莓通过服务器端代码成功接收到消息。但是,我在 C# 服务器端代码上苦苦挣扎了很长一段时间。以下是我正在运行的代码:
string userName = "<appID>";
string userPW = "<password>";
public static void SetBasicAuthHeader(WebRequest req, String userName, String userPassword)
{
string authInfo = userName + ":" + userPassword;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
req.Headers["Authorization"] = "Basic " + authInfo;
}
public static void SetProxy(WebRequest req)
{
Uri newUri = new Uri("http://cp(AppID).pushapi.eval.blackberry.com");
WebProxy proxy = new WebProxy();
proxy.Address = newUri;
proxy.Credentials = new NetworkCredential("<appID>", "<password>");
req.Proxy = proxy;
}
public bool pushTest(string msg)
{
HttpWebResponse HttpWRes = null;
HttpWebRequest HttpWReq = null;
string pin = "xxxxxxxx"; // or actual pin of device
string applicationID = "xxxxxxxxxxxxxxxxxxxxxx";
string BOUNDARY = "mPsbVQo0a68eIL3OAxnm";
//string msg1 = "testing c#"; // the message to send
string userName = "<appID>";
string userPW = "<password>";
string url = "https://pushapi.eval.blackberry.com/mss/PD_pushRequest";
HttpWReq = (HttpWebRequest)WebRequest.Create(url);
SetProxy(HttpWReq);
HttpWReq.Method = ("POST");
HttpWReq.Accept = "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";
//HttpWReq.Credentials = new NetworkCredential(userName, userPW);
HttpWReq.PreAuthenticate = true;
HttpWReq.ContentType = "multipart/related; boundary=" + BOUNDARY + "; type=application/xml";
SetBasicAuthHeader(HttpWReq, userName, userPW);
StringBuilder dataToSend = new StringBuilder();
dataToSend.AppendLine("--" + BOUNDARY);
dataToSend.AppendLine("Content-Type: application/xml; charset=UTF-8");
dataToSend.AppendLine("");
dataToSend.AppendLine("<?xml version=\"1.0\"?>");
dataToSend.AppendLine("<!DOCTYPE pap PUBLIC \"-//WAPFORUM//DTD PAP 2.1//EN\" \"http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd\">");
dataToSend.AppendLine("<pap>");
string myPushId = DateTime.Now.ToFileTime().ToString();
dataToSend.AppendLine("<push-message push-id=\"" + myPushId + "\" source-reference=\"" + applicationID + "\">");
dataToSend.AppendLine("<address address-value=\"" + pin + "\"/>");
dataToSend.AppendLine("<quality-of-service delivery-method=\"unconfirmed\"/>");
dataToSend.AppendLine("</push-message>");
dataToSend.AppendLine("</pap>");
dataToSend.AppendLine("--" + BOUNDARY);
dataToSend.AppendLine("Content-Type: text/plain");
dataToSend.AppendLine("Push-Message-ID: " + myPushId);
dataToSend.AppendLine("");
dataToSend.AppendLine(msg);
dataToSend.AppendLine("--" + BOUNDARY + "--");
dataToSend.AppendLine("");
Stream requestStream = null;
string pushResult = "";
try
{
requestStream = HttpWReq.GetRequestStream();
}
catch (Exception ex)
{
pushResult = "Push failed! " + ex.ToString();
}
byte[] outStr = new ASCIIEncoding().GetBytes(dataToSend.ToString());
requestStream.Write(outStr, 0, outStr.Length);
requestStream.Close();
try
{
HttpWRes = (HttpWebResponse)HttpWReq.GetResponse();
// MessageBox.show(""+HttpWRes);
}
catch (Exception ex)
{
//push failed
}
if (HttpWRes != null)
{
HttpWRes.Close();
}
return true;
}
我收到以下错误:
Push failed! System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 68.171.224.60:80
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
at System.Net.HttpWebRequest.GetRequestStream()
应用的凭据或 URL 是否有任何问题?请帮忙!!