Звучит так, как будто вы хотите использовать два приложения 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) будет поддерживать сокеты и это может быть более подходящим способом для ваших устройств общаться!
Удачи,
Джейсон.