Skip to content

Commit 83682ac

Browse files
flipdoubtDave Smith
andauthored
DiagnosticObserver does not use null connection (#845)
* DiagnosticObserver does not use null connection * Make TryGetSqlConnection static. Co-authored-by: Dave Smith <dave.smith@ventivtech.com>
1 parent d224abb commit 83682ac

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/DotNetCore.CAP.SqlServer/Diagnostics/DiagnosticObserver.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)