Звучит так, как будто вы хотите использовать два приложения WP7 для отправки сообщений друг другу с помощью функции push-уведомлений. Это правильно?
Насколько я понимаю, вам все равно потребуется, чтобы каждое устройство подписывалось на службу push-уведомлений (размещенную на MS) с использованием уникального URI, отправленного обратно после успешной подписки. Похоже, что SL3/4 может создавать объекты HttpWebRequest и, следовательно, должен иметь возможность сформулировать правильный пакет для отправки, однако сложность, как я вижу, будет заключаться в том, как получить URI устройства, на которое вы хотите отправить сообщение. Обычно сообщение отправляется подписчику, который знает свой URI, так как оно было возвращено на этапе подписки.
Мой размещенный код WCF работает только в том случае, если WCF знает URI устройства, который отправляется при вызове метода WCF:
public bool sendTileUpdate(string tileText, string url, string image)
{
string TilePushXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<wp:Notification xmlns:wp=\"WPNotification\">" +
"<wp:Tile>" +
"<wp:BackgroundImage>{2}</wp:BackgroundImage>" +
"<wp:Count>{0}</wp:Count>" +
"<wp:Title>{1}</wp:Title>" +
"</wp:Tile>" +
"</wp:Notification>";
try
{
HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(url);
sendNotificationRequest.Method = "POST";
sendNotificationRequest.Headers = new WebHeaderCollection();
sendNotificationRequest.ContentType = "text/xml";
// Tile
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "token");
sendNotificationRequest.Headers.Add("X-NotificationClass", "1");
string str = string.Format(TilePushXML, "", tileText, image);
byte[] strBytes = new UTF8Encoding().GetBytes(str);
sendNotificationRequest.ContentLength = strBytes.Length;
using (Stream requestStream = sendNotificationRequest.GetRequestStream())
{
requestStream.Write(strBytes, 0, strBytes.Length);
}
HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();
string notificationStatus = response.Headers["X-NotificationStatus"];
string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];
return true;
}
catch (Exception e)
{
return false;
}
}
Я знаю, что это TileNotification, но принципы те же.
Я понимаю, что Mango (WP7.1 и SL4) будет поддерживать сокеты и это может быть более подходящим способом связи для ваших устройств!
Удачи,
Джейсон.
person
Jason James
schedule
06.07.2011