Mono C# отлично работает на одном компьютере с Linux, но не на другом! Может быть, что-то делать с сертификатами?
У меня есть код, который вызывает мыльный сервис.
Он отлично работает на моей первой машине с Linux.
Однако, когда я запускаю его на другой машине, я получаю сообщение об ошибке ниже.
Google, кажется, показывает, что это может быть из сертификатов, хотя я не уверен в этом, так как переопределяю метод сертификатов через ServicePointManager.ServerCertificateValidationCallback = Validator;
куда Validator
это функция, которая возвращает истину
Есть идеи?
Unhandled Exception: System.Net.WebException: Error getting response stream (ReadDone1): ReceiveFailure ---> System.IO.IOException: EndRead failure ---> System.Net.Sockets.SocketException: Connection reset by peer
at System.Net.Sockets.Socket.EndReceive (IAsyncResult result) [0x00000] in <filename unknown>:0
at System.Net.Sockets.NetworkStream.EndRead (IAsyncResult ar) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.EndRead (IAsyncResult ar) [0x00000] in <filename unknown>:0
at Mono.Security.Protocol.Tls.SslStreamBase.InternalReadCallback (IAsyncResult result) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
at System.Net.HttpWebRequest.GetResponse () [0x00000] in <filename unknown>:0
at CRMOnlineSOAPRequests.CRMHelper.GetSOAPResponse (System.String url, System.String soapEnvelope) [0x00000] in <filename unknown>:0
at CRMOnlineSOAPRequests.CRMHelper.createEntity (System.String[] keyValuesOneDimensionalArray) [0x00000] in <filename unknown>:0
at CRMCreateEntity.Program.Main (System.String[] keyValuesOneDimensionalArray) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Net.WebException: Error getting response stream (ReadDone1): ReceiveFailure ---> System.IO.IOException: EndRead failure ---> System.Net.Sockets.SocketException: Connection reset by peer
at System.Net.Sockets.Socket.EndReceive (IAsyncResult result) [0x00000] in <filename unknown>:0
at System.Net.Sockets.NetworkStream.EndRead (IAsyncResult ar) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.EndRead (IAsyncResult ar) [0x00000] in <filename unknown>:0
at Mono.Security.Protocol.Tls.SslStreamBase.InternalReadCallback (IAsyncResult result) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
at System.Net.HttpWebRequest.GetResponse () [0x00000] in <filename unknown>:0
at CRMOnlineSOAPRequests.CRMHelper.GetSOAPResponse (System.String url, System.String soapEnvelope) [0x00000] in <filename unknown>:0
at CRMOnlineSOAPRequests.CRMHelper.createEntity (System.String[] keyValuesOneDimensionalArray) [0x00000] in <filename unknown>:0
at CRMCreateEntity.Program.Main (System.String[] keyValuesOneDimensionalArray) [0x00000] in <filename unknown>:0
1 ответ
У нас была проблема с сертификатом в нашей компании, другая компания хотела, чтобы мы использовали сертификат, сгенерированный онлайн, а не "официальный" сертификат. Мы не хотели включать этот сертификат в наш список доверенных, потому что другие компании также могли бы использовать его. Для этого мы использовали следующий код для временного принятия всех сертификатов, а затем сбросили обработку сертификатов:
System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
//Whatever the certificate, accept it.
return true;
};
//Do your request
//Reset handling to normal.
System.Net.ServicePointManager.ServerCertificateValidationCallback = null;
Пожалуйста, обратите внимание, что это в.NET не моно, поэтому я не уверен, будет ли это работать.