Notification push Apple côté serveur en C #

Je suis nouveau sur .net et je fais de l’apn serveur côté C # J’utilise le code ci-dessous pour envoyer les messages au serveur Apple.

private void pushMessage() { int port = 2195; Ssortingng deviceID = "4564c705 63b371aa 3811699e 1e4ac3d2 ba592b27 f2a5a613 d25cd035 xx213e54"; Ssortingng hostname = "gateway.sandbox.push.apple.com"; // TEST //Ssortingng hostname = "gateway.push.apple.com"; // REAL // @"cert.p12"; Ssortingng certificateePath = HttpContext.Current.Server.MapPath("Certi.p12"); //X509Certificate2 clientCertificate = new X509Certificate2(certificateePath, ""); X509Certificate2 clientCertificate = new X509Certificate2(System.IO.File.ReadAllBytes(certificateePath), "", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); X509Certificate2Collection certificateesCollection = new X509Certificate2Collection(clientCertificate); TcpClient client = new TcpClient(hostname, port); // _apnsStream = new SslStream(_apnsClient.GetStream(), false, validateServerCertificate, SelectLocalCertificate); //SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate),null); SslStream sslStream = new SslStream(client.GetStream(), false, validateServerCertificate, SelectLocalCertificate); try { sslStream.AuthenticateAsClient(hostname, certificateesCollection, SslProtocols.Default, false); } catch (Exception e) { throw (e); client.Close(); return; } MemoryStream memoryStream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(memoryStream); writer.Write((byte)0); //The command writer.Write((byte)0); //The first byte of the deviceId length (big-endian first byte) writer.Write((byte)32); //The deviceId length (big-endian second byte) writer.Write(HexSsortingngToByteArray(deviceID.ToUpper())); Ssortingng payload = "{\"aps\":{\"alert\":\"hello\",\"badge\":0,\"sound\":\"default\"}}"; writer.Write((byte)0); writer.Write((byte)payload.Length); byte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload); writer.Write(b1); writer.Flush(); byte[] array = memoryStream.ToArray(); sslStream.Write(array); sslStream.Flush(); client.Close(); } private ssortingng HexSsortingngToByteArray(ssortingng p) { throw new NotImplementedException(); } 

En cours d’exécution, une erreur du type “Un appel à SSPI a échoué, voir exception interne”.

entrez la description de l'image ici

entrez la description de l'image ici

Je fais n’importe quoi ou raté ici. Toute installation de certificate est requirejse dans Windows? Aidez-moi, s’il vous plaît.

J’ai changé mon code dans le fichier PushNotification.class

 _certificatee = ssortingng.IsNullOrEmpty(p12FilePassword)? new X509Certificate2(File.ReadAllBytes(p12File)): new X509Certificate2(File.ReadAllBytes(p12File), p12FilePassword); 

avec

 _certificatee = ssortingng.IsNullOrEmpty(p12FilePassword) ? new X509Certificate2(File.ReadAllBytes(p12File)) : new X509Certificate2(File.ReadAllBytes(p12File), p12FilePassword, X509KeyStorageFlags.MachineKeySet); 

alors essayez ….

 SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); .... public static bool ValidateServerCertificate(object sender, X509Certificate certificatee, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) return true; gerarLog("Certificate error: " + sslPolicyErrors); // Do not allow this client to communicate with unauthenticated servers. return false; } public static byte[] HexSsortingngToByteArray(ssortingng hexSsortingng) { byte[] HexAsBytes = new byte[hexSsortingng.Length / 2]; for (int index = 0; index < HexAsBytes.Length; index++) { string byteValue = hexString.Substring(index * 2, 2); HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture); } return HexAsBytes; }