@@ -13,9 +13,7 @@ namespace DotNetCore.CAP.SqlServer.Diagnostics
1313{
1414 internal class DiagnosticObserver : IObserver < KeyValuePair < string , object > >
1515 {
16- public const string SqlAfterCommitTransaction = "System.Data.SqlClient.WriteTransactionCommitAfter" ;
1716 public const string SqlAfterCommitTransactionMicrosoft = "Microsoft.Data.SqlClient.WriteTransactionCommitAfter" ;
18- public const string SqlErrorCommitTransaction = "System.Data.SqlClient.WriteTransactionCommitError" ;
1917 public const string SqlErrorCommitTransactionMicrosoft = "Microsoft.Data.SqlClient.WriteTransactionCommitError" ;
2018
2119 private readonly ConcurrentDictionary < Guid , List < MediumMessage > > _bufferList ;
@@ -38,25 +36,31 @@ public void OnError(Exception error)
3836
3937 public void OnNext ( KeyValuePair < string , object > evt )
4038 {
41- if ( evt . Key == SqlAfterCommitTransaction || evt . Key == SqlAfterCommitTransactionMicrosoft )
39+ if ( evt . Key == SqlAfterCommitTransactionMicrosoft )
4240 {
43- var sqlConnection = ( SqlConnection ) GetProperty ( evt . Value , "Connection" ) ;
41+ if ( ! TryGetSqlConnection ( evt , out SqlConnection sqlConnection ) ) return ;
4442 var transactionKey = sqlConnection . ClientConnectionId ;
4543 if ( _bufferList . TryRemove ( transactionKey , out var msgList ) )
4644 foreach ( var message in msgList )
4745 {
4846 _dispatcher . EnqueueToPublish ( message ) ;
4947 }
5048 }
51- else if ( evt . Key == SqlErrorCommitTransaction || evt . Key == SqlErrorCommitTransactionMicrosoft )
49+ else if ( evt . Key == SqlErrorCommitTransactionMicrosoft )
5250 {
53- var sqlConnection = ( SqlConnection ) GetProperty ( evt . Value , "Connection" ) ;
51+ if ( ! TryGetSqlConnection ( evt , out SqlConnection sqlConnection ) ) return ;
5452 var transactionKey = sqlConnection . ClientConnectionId ;
5553
5654 _bufferList . TryRemove ( transactionKey , out _ ) ;
5755 }
5856 }
5957
58+ private static bool TryGetSqlConnection ( KeyValuePair < string , object > evt , out SqlConnection sqlConnection )
59+ {
60+ sqlConnection = GetProperty ( evt . Value , "Connection" ) as SqlConnection ;
61+ return sqlConnection != null ;
62+ }
63+
6064 private static object GetProperty ( object _this , string propertyName )
6165 {
6266 return _this . GetType ( ) . GetTypeInfo ( ) . GetDeclaredProperty ( propertyName ) ? . GetValue ( _this ) ;
0 commit comments