Я пытаюсь сделать уведомление push push с помощью кода C#. Его работа отлично работает на моей локальной машине, и я получаю уведомления. Но при загрузке на сервер я получаю исключение при попытке создать новый сертификат. Это код, я используюAPN Ошибка при загрузке на сервер
protected void sendPayLoad(string message, string eqpt_ID)
{
try
{
if (eqpt_ID == string.Empty || eqpt_ID == " (null)")
{
Log_Error_Message("void sendPayLoad(string message, string eqpt_ID)", "No equipment ID");
return;
}
int port;
String hostname, cert_path, payload;
string deviceId, certificatePath, certificatePassword;
X509Certificate2 clientCertificate=null;
X509Certificate2Collection certificatesCollection=null;
TcpClient client=null;
SslStream sslStream=null;
MemoryStream memoryStream=null;
BinaryWriter writer=null;
byte[] b1, array;
hostname = "gateway.sandbox.push.apple.com";// "gateway.push.apple.com";
cert_path = Session["cert_path"].ToString();
port = 2195;
if (cert_path == string.Empty)
{
Alert.Show("No certificate found for sending message to customer");
return;
}
//load certificate
certificatePath = Server.MapPath(cert_path);//Add p12 certificate here
certificatePassword = string.Empty;
try
{
clientCertificate = new X509Certificate2(certificatePath, certificatePassword);
}
catch (Exception ex)
{
Log_Error_Message("void sendPayLoad(string message, string eqpt_ID)", "X509Certificate2 error:- \t " + ex.Message);
return;
}
try
{
certificatesCollection = new X509Certificate2Collection(clientCertificate);
}
catch (Exception ex)
{
Log_Error_Message("void sendPayLoad(string message, string eqpt_ID)", "X509Certificate2Collection error:- \t " + ex.Message);
return;
}
try
{
client = new TcpClient(hostname, port);
}
catch (Exception ex)
{
Log_Error_Message("void sendPayLoad(string message, string eqpt_ID)", "TcpClient error:- \t " + ex.Message);
return;
}
try
{
sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
}
catch (Exception ex)
{
Log_Error_Message("void sendPayLoad(string message, string eqpt_ID)", "SslStream or RemoteCertificateValidationCallback error:- \t " + ex.Message);
return;
}
try
{
sslStream.AuthenticateAsClient(hostname, certificatesCollection, SslProtocols.Tls, true);
}
catch (AuthenticationException ex)
{
client.Close();
Log_Error_Message("void sendPayLoad(string message, string eqpt_ID)", "AuthenticationException:\n\t" + ex.Message);
return;
}
// Encode a test message into a byte array.
memoryStream = new MemoryStream();
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)
deviceId = eqpt_ID;
writer.Write(HexToData(deviceId.ToUpper()));
payload = "{\"aps\":{\"alert\":\"" + message + "\",\"badge\":1}}";
writer.Write((byte)0); //First byte of payload length; (big-endian first byte)
writer.Write((byte)payload.Length); //payload length (big-endian second byte)
b1 = System.Text.Encoding.UTF8.GetBytes(payload);
writer.Write(b1);
writer.Flush();
array = memoryStream.ToArray();
sslStream.Write(array);
sslStream.Flush();
//String deviceId = "DEVICEIDGOESHERE";
// Close the client connection.
client.Close();
}
catch (Exception ex)
{
Cre_Log_Err_takeaway.Append_Err_Msg("rest/booking.aspx_page", "void sendPayLoad(string message, string eqpt_ID)", ex.Message);
}
}
При попытке запустить сервер я получаю excception на этой линии
try
{
clientCertificate = new X509Certificate2(certificatePath, certificatePassword);
}
catch (Exception ex)
{
Log_Error_Message("void sendPayLoad(string message, string eqpt_ID)", "X509Certificate2 error:- \t " + ex.Message);
return;
}
В журналах я только получаю
внутренний произошла ошибка
Я распечатал путь сертификата и его указатель на этом пути
D: \ хостинг \ 8842886 \ HTML \ testwebsite \ certificate_201212725953Pushcerti.p12
Также для этого сертификата я не имею никакого пароля, поэтому я использую Sting.Empty Я также пробовал пропустить пустую строку вроде этого "". Не повезло. Я использовал этот код раньше на реальном сервере, и он работал нормально. На этот раз я использую сервер godaddy.
Как я могу это сделать правильно?
Благодаря
в стороне от всего этого кода, публикуемого какой ошибки вы получаете, например, если вы отладить этот код на сервере .. и на сервере, на котором вы говорите о том, есть D: привод Можешь подтвердить...? вы также можете сравнить разницу сертификата, который находится на рабочем компьютере, и тот, который не является. должно быть что-то маленькое, это совсем другое. Вероятно, вы смотрели на вас прямо в лицо с должным уважением. Также проверьте настройки файла .config или настройки Machine.Config, чтобы быть уверенным .... – MethodMan
Оформить эту ссылку, а также это может помочь вам быстро найти решение http://social.msdn.microsoft.com/Forums/en-AU/csharplanguage/thread/4011d0ea-3dba-4d04-b6cf-adada7956f02 – MethodMan