Ais.Net.Receiver icon indicating copy to clipboard operation
Ais.Net.Receiver copied to clipboard

Handle Azure Storage Authentication Exception

Open HowardvanRooijen opened this issue 5 years ago • 1 comments

When the AIS Receiver was running for over 7 days a fatal exception occurred while attempting to write a batch of messages to blob storage:

Unhandled Exception: Microsoft.Azure.Storage.StorageException: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync[T](RESTCommand 1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
at Microsoft.Azure.Storage.Core.Executor.Executor.<>cDisplayClass0_0 1.<ExecuteSync>b0()
at Microsoft.Azure.Storage.Core.Uti1.CommonUti1ity.RunWithoutSynchronizationContext[T](Func'1 actionToRun) at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand 1 cmd, IRetryPolicy policy, OperationCon text operationContext)
at Endjin.Ais.Receiver.Program.GetAppendBlob() in C:\_Proj ects\OSS\Endjin.Ais.Receiver\Endjin.Ais.Receiver\Program.cs :line 98
at Endiin.Ais.Receiyer.Program.OnMessageReceived(lList 1 messages) in C:\Endjin.Ais.Receiver\Program.cs:line 83
at System.Reactive.AnonymousSafeObserver 1.OnNext(T value) in D:\a\l\s\Rx.NET\Source\src\System.Reactive\AnonymousSafeObserver.csrline 44
at System.Reactive.Subjects.Subject 1.OnNext(T value) in D:\a\l\s\Rx.NET\Source\src\System.Reactive\Subjects\Subject.cs:line 148
at Endjin.Ais.Receiver.NmeaReceiver.RecieveAsync() in C:\Endjin.Ais.Receiver\NmeaReceiver.csrline 59
at Endjin.Ais.Receiver.Program.LongRunningOperationAsync() in C:\Endjin.Ais.Receiver\Program.cs:1ine 74
at Endjin.Ais.Receiyer.Program.LonqRunningOperationWithCancel1ationTokenAsync(Cancel1ationToken cancel1ationToken) in C:\Endjin.Ais.Receiver\Program.cs:1ine 61
at Enajin.Ais.Receiver.Program.Main(String[] args) in C:\Endjin.Ais.Receiver\Progra m.cs:line 33
at Endjin.Ais.Receiver.Program.<Main>(String[] args)

HowardvanRooijen avatar Aug 06 '19 08:08 HowardvanRooijen

See also:

Unhandled Exception: Microsoft.Azure.Storage.StorageException: The SSL connection could not be established, see inner exception. ---> System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
   at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, ExceptionDispatchInfo exception)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
   at System.Net.Security.SslState.PartialFrameCallback(AsyncProtocolRequest asyncRequest)
--- End of stack trace from previous location where exception was thrown ---
   at System.Net.Security.SslState.ThrowIfExceptional()
   at System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
   at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
   at System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
   at System.Net.Security.SslStream.<>c.<AuthenticateAsClientAsync>b__47_1(IAsyncResult iar)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
   --- End of inner exception stack trace ---
   at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteAsync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext, CancellationToken token)
   at Microsoft.Azure.Storage.Core.Executor.Executor.<>c__DisplayClass0_0`1.<ExecuteSync>b__0()
   at Microsoft.Azure.Storage.Core.Util.CommonUtility.RunWithoutSynchronizationContext[T](Func`1 actionToRun)
   at Microsoft.Azure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)
   at Microsoft.Azure.Storage.Blob.CloudBlobContainer.Create(BlobContainerPublicAccessType accessType, BlobRequestOptions requestOptions, OperationContext operationContext)
   at Microsoft.Azure.Storage.Blob.CloudBlobContainer.CreateIfNotExists(BlobContainerPublicAccessType accessType, BlobRequestOptions requestOptions, OperationContext operationContext)
   at Endjin.Ais.Receiver.StorageClient.InitialiseConnection() in C:\Ais.Net.Receiver\Solutions\Ais.Net.Receiver\StorageClient.cs:line 52
   at Endjin.Ais.Receiver.StorageClient.AppendMessages(IList`1 messages) in C:\Ais.Net.Receiver\Solutions\Ais.Net.Receiver\StorageClient.cs:line 39
   at System.Reactive.AnonymousSafeObserver`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\AnonymousSafeObserver.cs:line 44
   at System.Reactive.Subjects.Subject`1.OnNext(T value) in D:\a\1\s\Rx.NET\Source\src\System.Reactive\Subjects\Subject.cs:line 148
   at Endjin.Ais.Receiver.NmeaReceiver.RecieveAsync() in C:\Ais.Net.Receiver\Solutions\Ais.Net.Receiver\NmeaReceiver.cs:line 62
   at Endjin.Ais.Receiver.Program.Main(String[] args) in C:\Ais.Net.Receiver\Solutions\Ais.Net.Receiver\Program.cs:line 31
   at Endjin.Ais.Receiver.Program.<Main>(String[] args)

HowardvanRooijen avatar Aug 27 '19 20:08 HowardvanRooijen