C# iPhone push serveur?
Im essayant d'écrire un push serveur pour l'iPhone en C#. J'ai le code suivant:
//Create a TCP/IP client socket.
using (TcpClient client = new TcpClient())
{
client.Connect("gateway.sandbox.push.apple.com", 2195);
using (NetworkStream networkStream = client.GetStream())
{
Console.WriteLine("Client connected.");
X509Certificate clientCertificate = new X509Certificate(@"certfile.p12", passwordHere);
X509CertificateCollection clientCertificateCollection = new X509CertificateCollection(new X509Certificate[1] { clientCertificate });
//Create an SSL stream that will close the client's stream.
SslStream sslStream = new SslStream(
client.GetStream(),
false,
new RemoteCertificateValidationCallback(ValidateServerCertificate),
null
);
try
{
sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com");
}
catch (AuthenticationException e)
{
Console.WriteLine("Exception: {0}", e.Message);
if (e.InnerException != null)
{
Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
}
Console.WriteLine("Authentication failed - closing the connection.");
client.Close();
return;
}
}
ect....
Seulement-je continuer à recevoir une exception:
"Un appel à la SSPI échoue, consultez la section Intérieure d'exception"
Exception interne -> "Le message reçu était inattendu ou mal formaté."
Quelqu'un aurait-il une idée de ce qui se passe mal ici?
- Pensé à elle. Remplacé sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com"); avec sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Par défaut, false); Et enregistré les certificats sur le PC.
- Il a travaillé pour vous?
- Oui, j'ai tout de travail et peuvent les messages de push sur mon iPhone. N'oubliez pas d'enregistrer votre .p12 fichier avec windows.
- Êtes-vous en cours d'exécution mono sur votre iPhone?
- vous devez répondre à votre propre question pour le fermer.
- Désolé, va le faire 🙂
- C'est d'enregistrer la .fichier p12 une étape nécessaire? J'ai pensé depuis que vous avez été de les charger à partir du fichier, il ne serait pas question.
Vous devez vous connecter pour publier un commentaire.
Pensé à elle. Remplacé sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com"); avec sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Par défaut, false); Et enregistré les certificats sur le PC.
Edit: Voici le code pour la création d'une charge utile, comme l'a demandé:
De Zenox commentaire:
utiliser une version différente de AuthenticateAsClient
Autre façon de faire est juste d'utiliser X509Certificate2 et X509CertificateCollection2 classes.
J'ai récemment utilisé Growl Pour Windows de pousser des messages à l'Affût du client sur l'IPhone de .Net code. Alors vous pourriez obtenir votre functionatlity sans écrire un push serveur vous-même.
L' "Le message reçu était inattendu ou mal formaté." erreur survient généralement lorsque vous n'enregistrez pas le certificat p12 dans Windows. (Sous Vista, il suffit de double cliquer sur le fichier p12 et l'assistant d'importation ouvert)
Dans mon cas, j'ai dû supprimer tous les certificats à partir de mon windows 8 et puis de le ré-installer pour envoyer des notifications push à l'appareil d'apple.
Je ne sais pas pourquoi mes certificats d'arrêt de travail, je suis à la recherche pour la bonne raison et de la volonté de mise à jour ici bientôt.