如何为SCOM SDK设置连接超时
How to set Connection Timeout for SCOM SDK
我有下一个代码:
private ManagementGroup ConnectToManagementGroup(string serverName, string domain, string userName, string password)
{
var settings = new ManagementGroupConnectionSettings(serverName)
{
UserName = userName,
Domain = domain,
Password = password.ToSecureString()
};
var managementGroup = ManagementGroup.Connect(settings);
if (!managementGroup.IsConnected)
{
throw new Exception($"Can't connect to {serverName} SDK service.");
}
return managementGroup;
}
代码运行良好。
但是,如果我的 SCOM 服务器已关闭,则连接需要一分钟才能引发 TimeOut
异常。
我在 ManagementGroupConnectionSettings
class 中找到了两个属性 InactivityTimeout
和 SendReceiveTimeout
。
我尝试使用这些属性来更改默认 TimeOut
值。
但不幸的是它不起作用。
我也找不到任何关于 SCOM SDK 连接 TimeOut
的文档。
我查看了很多链接:here, here and here...
但是我的问题没有答案...
如何自己设置连接超时?
简答:无法设置连接超时。
长答案。 Microsoft 使用 DuplexChannelFactory
class 进行 SDK 数据层连接。 class 有 7 种不同的超时设置:Explaination of different timeout types。 Microsoft 创建 Channel Factory class 实例的实际代码如下:
DuplexChannelFactory<T> duplexChannelFactory = new DuplexChannelFactory<T>((object) this.clientCallback, (Binding) new IndigoCustomBinding(false, this.connectionSettings.SendReceiveTimeout, this.connectionSettings.InactivityTimeout), new EndpointAddress(new Uri(string.Format((IFormatProvider) CultureInfo.InvariantCulture, endpointUri, new object[1]
{
(object) this.connectionSettings.ServerName
})), EndpointIdentity.CreateSpnIdentity(string.Format((IFormatProvider) CultureInfo.InvariantCulture, spn, new object[1]
{
(object) this.connectionSettings.ServerName
})), new AddressHeaderCollection()));
他们使用自定义绑定对象 internal class IndigoCustomBinding : Binding
,它没有 override/define OpenTimeout
属性,所以这个超时值是原始 Binding
的默认值] class.
我有下一个代码:
private ManagementGroup ConnectToManagementGroup(string serverName, string domain, string userName, string password)
{
var settings = new ManagementGroupConnectionSettings(serverName)
{
UserName = userName,
Domain = domain,
Password = password.ToSecureString()
};
var managementGroup = ManagementGroup.Connect(settings);
if (!managementGroup.IsConnected)
{
throw new Exception($"Can't connect to {serverName} SDK service.");
}
return managementGroup;
}
代码运行良好。
但是,如果我的 SCOM 服务器已关闭,则连接需要一分钟才能引发 TimeOut
异常。
我在 ManagementGroupConnectionSettings
class 中找到了两个属性 InactivityTimeout
和 SendReceiveTimeout
。
我尝试使用这些属性来更改默认 TimeOut
值。
但不幸的是它不起作用。
我也找不到任何关于 SCOM SDK 连接 TimeOut
的文档。
我查看了很多链接:here, here and here...
但是我的问题没有答案...
如何自己设置连接超时?
简答:无法设置连接超时。
长答案。 Microsoft 使用 DuplexChannelFactory
class 进行 SDK 数据层连接。 class 有 7 种不同的超时设置:Explaination of different timeout types。 Microsoft 创建 Channel Factory class 实例的实际代码如下:
DuplexChannelFactory<T> duplexChannelFactory = new DuplexChannelFactory<T>((object) this.clientCallback, (Binding) new IndigoCustomBinding(false, this.connectionSettings.SendReceiveTimeout, this.connectionSettings.InactivityTimeout), new EndpointAddress(new Uri(string.Format((IFormatProvider) CultureInfo.InvariantCulture, endpointUri, new object[1]
{
(object) this.connectionSettings.ServerName
})), EndpointIdentity.CreateSpnIdentity(string.Format((IFormatProvider) CultureInfo.InvariantCulture, spn, new object[1]
{
(object) this.connectionSettings.ServerName
})), new AddressHeaderCollection()));
他们使用自定义绑定对象 internal class IndigoCustomBinding : Binding
,它没有 override/define OpenTimeout
属性,所以这个超时值是原始 Binding
的默认值] class.