-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathMqSeriesQueueConfiguration.cs
More file actions
155 lines (133 loc) · 4.33 KB
/
MqSeriesQueueConfiguration.cs
File metadata and controls
155 lines (133 loc) · 4.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using ViennaNET.Messaging.Configuration;
namespace ViennaNET.Messaging.MQSeriesQueue
{
/// <summary>
/// Место хранения сертификата
/// </summary>
public enum ClientCertificateStore
{
/// <summary>
/// User
/// </summary>
User = 0,
/// <summary>
/// Machine
/// </summary>
Machine,
}
/// <summary>
/// Настройки очереди
/// </summary>
public class MqSeriesQueueConfiguration : QueueConfigurationBase, IValidatableObject
{
/// <summary>
/// Клиентский идентификатор
/// </summary>
[Required]
public string ClientId { get; set; }
/// <summary>
/// Сервер
/// </summary>
[Required]
public string Server { get; set; }
/// <summary>
/// Порт
/// </summary>
[Required]
public ushort Port { get; set; }
/// <summary>
/// Имя менеджера очередей
/// </summary>
[Required]
public string QueueManager { get; set; }
/// <summary>
/// Имя канала
/// </summary>
[Required]
public string Channel { get; set; }
/// <summary>
/// Пользователь (пусто - без авторизации)
/// </summary>
public string? User { get; set; }
/// <summary>
/// Пароль
/// </summary>
public string? Password { get; set; }
/// <summary>
/// Селектор для вычитывания из очереди отфильтрованных сообщений
/// </summary>
public string? Selector { get; set; }
/// <summary>
/// Строка подключения
/// </summary>
public string? QueueString { get; set; }
/// <summary>
/// Имя очереди
/// </summary>
public string? QueueName { get; set; }
/// <summary>
/// Признак работы в транзакции
/// </summary>
public bool TransactionEnabled { get; set; }
/// <summary>
/// Признак использования строки подключения
/// </summary>
public bool UseQueueString { get; set; }
/// <summary>
/// Использовать защищённое соединение с брокером
/// </summary>
public bool TlsEnabled { get; set; }
/// <summary>
/// Имя хранилища сертификатов для защищённого подключения к брокеру
/// </summary>
public ClientCertificateStore TlsClientCertStore { get; set; }
/// <summary>
/// Friendly Name клиентского сертификата на Windows
/// </summary>
public string? TlsClientCertLabel { get; set; }
/// <summary>
/// Subject (DN) сертификата сервера для проверки при подключении
/// </summary>
public string? TlsServerCertSubject { get; set; }
/// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (UseQueueString)
{
if (string.IsNullOrWhiteSpace(QueueString))
{
yield return new ValidationResult("If UseQueueString is true, QueueString should be set",
new[] { nameof(QueueString) });
}
}
else
{
if (string.IsNullOrWhiteSpace(QueueName))
{
yield return new ValidationResult("If UseQueueString is false, QueueName should be set",
new[] { nameof(QueueName) });
}
}
if (TransactionEnabled && ProcessingType != MessageProcessingType.ThreadStrategy)
{
yield return new ValidationResult("Only ThreadStrategy is supported with transactions enabled",
new[] { nameof(ProcessingType) });
}
if (!TlsEnabled)
{
if (!string.IsNullOrEmpty(TlsClientCertLabel))
{
yield return new ValidationResult("Need to enable TLS first: set TlsEnabled to true",
new[] { nameof(TlsClientCertLabel) });
}
if (!string.IsNullOrEmpty(TlsServerCertSubject))
{
yield return new ValidationResult("Need to enable TLS first: set TlsEnabled to true",
new[] { nameof(TlsServerCertSubject) });
}
}
}
}
}