5

我们有一个使用我们产品的客户端,其中包括使用 .NET 4+、Entity Framework 和 ODP.NET 构建的 Windows 服务。由于某种原因,在一个特定安装中,但不是任何其他原因,Windows 服务似乎在 6200 上生成流量 。Oracle 文档表明这是 Oracle 通知服务使用的端口。这是出乎意料的,因为我们的产品不使用 ONS。我发现其他 Oracle 文档表明 RAC/Fast Failover 也使用 ONS,但我们已经与客户端确认他们在任何环境中都不使用 RAC,并且我们没有在连接字符串中使用 RAC 选项。我们也没有(据我们所知)使用数据库更改通知或对缓存数据进行任何缓存/验证,这听起来也利用了 ONS。

谁能帮助解释为什么我们会生成端口 6200 流量,更重要的是,如何让它停止?谢谢!

网络统计结果

任务管理器

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings [Redacted] />
  <appSettings [Redacted] />
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </providers>
    <contexts>
      <context type="[Redacted]" disableDatabaseInitialization="true" />
    </contexts>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" />
  </runtime>
</configuration>
4

2 回答 2

1

我们已将罪魁祸首缩小到 3 个 Oracle / ODP.NET 特定连接字符串设置中的一个或多个:

ENLIST, HA EVENTS, 和/或LOAD BALANCING

Oracle 关于快速应用程序通知的文档向我们提示了这些我们不知道的设置。这将我们引向 Oracle 关于其所有Feature Connection String Attributes的文档。

Enlist - 默认“true” - 服务组件自动在分布式事务中登记。

HA 事件- 默认“false” - 使 ODP.NET 连接池能够在 RAC 服务、服务成员或节点出现故障时主动从池中删除连接。

负载平衡- 默认“false” - 使 ODP.NET 连接池能够根据负载平衡建议和服务目标平衡跨 RAC 实例的工作请求。

我们将所有 3 设置为显式为 false,并且端口 6200 连接结束。

ENLIST=false; HA EVENTS=false; LOAD BALANCING=false;

如果要相信默认设置,那么 Enlist 就是罪魁祸首,但客户的可用性不允许进行离散测试来确认。我们遇到了其他各种文档,这些文档将所有这 3 个功能链接到 Oracle 通知服务和端口 6200。

于 2017-08-29T15:31:56.037 回答
0

它可能取决于安装的 Oracle 客户端版本。在 12.1.0.2 中发布了 ONS 功能的自动配置。在建立产生此流量的数据库连接开始时,它可能具有类似于 ONS 自动发现的功能。

于 2017-08-28T19:43:59.870 回答