如何为SCOM SDK

时间:2018-02-26 09:42:28

标签: c# .net scom system-center

我有下一个代码:

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课程中找到了两个属性SendReceiveTimeoutManagementGroupConnectionSettings

我尝试使用这些属性来更改默认TimeOut值。

但不幸的是它没有用。

此外,我无法找到有关SCOM SDK的连接TimeOut的任何文档。

我查看了很多链接:hereherehere ...

但我的问题没有答案......

如何设置TimeOut以进行连接?

1 个答案:

答案 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类。