我有下一个代码:
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
例外。
我在InactivityTimeout
课程中找到了两个属性SendReceiveTimeout
和ManagementGroupConnectionSettings
。
我尝试使用这些属性来更改默认TimeOut
值。
但不幸的是它没有用。
此外,我无法找到有关SCOM SDK的连接TimeOut
的任何文档。
但我的问题没有答案......
如何设置TimeOut以进行连接?
答案 0 :(得分:0)
简短回答:无法设置连接超时。
答案很长。 Microsoft使用DuplexChannelFactory
类进行SDK数据层连接。此类有7种不同的超时设置:Explaination of different timeout types。实际的代码,Microsoft创建的Channel Factory类的实例如下:
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
,它不会覆盖/定义OpenTimeout
属性,因此该超时值默认为原始Binding
类。