ODP.NET +端口6200上的意外流量(Oracle Notification Services)

时间:2017-08-23 15:27:49

标签: oracle odp.net odp.net-managed

我们的客户使用我们的产品,其中包括使用.NET 4 +,Entity Framework和ODP.NET构建的Windows服务。出于某种原因,在某个特定安装中,而不是任何其他安装,Windows服务似乎在6200上生成流量。Oracle Documentation表示这是Oracle Notification Services使用的端口。这是意料之外的,因为我们的产品不使用ONS。我发现other Oracle Documentation表示RAC /快速故障转移也使用ONS,但我们已经向客户确认他们在任何环境中都不使用RAC,而且我们没有使用RAC选项在连接字符串中。我们也不是(据我们所知)使用Database Change Notifications或对缓存数据进行任何缓存/验证,这听起来也是利用ONS。

任何人都可以帮忙解释为什么我们会生成端口6200流量,更重要的是,如何让它停止?谢谢!

Netstat Results

Task Manager

<?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>

2 个答案:

答案 0 :(得分:0)

可能取决于已安装的Oracle客户端版本。在12.1.0.2中,发布了ONS功能的自动配置。它可能在建立数据库连接的开始时就像ONS自动发现一样产生这种流量。

答案 1 :(得分:0)

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

ENLISTHA EVENTS和/或LOAD BALANCING

Oracle关于Fast Application Notification的文档向我们介绍了我们尚未意识到的这些设置。这将引导我们获取Oracle所有Feature Connection String Attributes

的文档
  

登记 - 默认“true” - 服务组件自动登记   分布式交易。

     

HA事件 - 默认“false” - 启用ODP.NET连接池   在RAC服务时主动删除池中的连接,   服务成员或节点发生故障。

     

负载平衡 - 默认“false” - 启用ODP.NET连接池   根据负载平衡跨RAC实例平衡工作请求   咨询和服务目标。

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

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

如果要相信默认值,则Enlist是罪魁祸首,但客户的可用性不允许进行离散测试。我们遇到了其他各种文档,将所有这三个功能链接到Oracle Notification Services&amp;港口6200。