oracle - ODP.NET + 端口 6200 上的意外流量(Oracle 通知服务)

标签 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/Fast Failover 也使用 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>

最佳答案

我们已将罪魁祸首范围缩小到 3 个特定于 Oracle/ODP.NET 的连接字符串设置中的一个或多个:
ENLIST , HA EVENTS ,和/或 LOAD BALANCING
Oracle 关于 Fast Application Notification 的文档向我们透露了这些我们不知道的设置。这将我们引向 Oracle 关于其所有 Feature Connection String Attributes 的文档。 .

Enlist - Default "true" - Serviced components automatically enlist in distributed transactions.

HA Events - Default "false" - Enables ODP.NET connection pool to proactively remove connections from the pool when a RAC service, service member, or node goes down.

Load Balancing - Default "false" - Enables ODP.NET connection pool to balance work requests across RAC instances based on the load balancing advisory and service goal.



我们将所有 3 显式设置为 false,并且端口 6200 连接结束。
ENLIST=false; HA EVENTS=false; LOAD BALANCING=false;

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

关于oracle - ODP.NET + 端口 6200 上的意外流量(Oracle 通知服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843830/

相关文章:

odp.net-managed - Oracle ODP.NET 错误

c# - Oracle managed driver 能否正确使用 async/await?

c# - 使用 Oracle.ManagedDataAccess 异常连接到 Oracle

sql - 在sqldeveloper中获取完整结果

c# - 如何使用 ODP.Net 传递字节数组?

.net - ODP.NET集成安全性无效的连接字符串参数

c# - 适用于 32 位和 64 位的 ODP.NET

java - Oracle Varchar2(byte) 与 java 字节

java - 直接使用java在Oracle数据库中创建函数

ado.net - Oracle .NET 数据提供程序和转换