1

我有下一个代码:

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值。

但不幸的是,它不起作用。

我也找不到任何关于TimeOutSCOM SDK 连接的文档。

我查看了许多链接:这里这里这里...

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

如何自己设置连接超时?

4

1 回答 1

0

简短回答:无法设置连接超时。

长答案。Microsoft 使用DuplexChannelFactory类进行 SDK 数据层连接。此类有 7 种不同的超时设置:不同超时类型的解释。微软创建 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类的默认值。

于 2018-02-27T22:52:22.177 回答