gpt4 book ai didi

c# - 使用 WCF : Timeout 访问 SQL-Server

转载 作者:行者123 更新时间:2023-12-04 07:04:39 25 4
gpt4 key购买 nike

我有一台带有 SQL2008 数据库和 IIS7 的服务器。我创建了一个 WCF 服务,它访问 SQL-Server 并以 List<T> 的形式返回结果集.

我的问题是,从客户端访问服务时我会超时,尽管查询不应该花费太长时间(在 SQL 管理器中大约 1 秒)它会获取 17.256 行。

当我将查询限制为仅读取十几行时,它运行良好:

SqlCommand command = new SqlCommand("SELECT stammDatenId, position, latitude, longitude FROM geoKoordinates ORDER BY stammDatenId, position", connection);
IDataReader reader = command.ExecuteReader();
int count = 0;

while (reader.Read())
{
GeoKoordinates geoKoors = new GeoKoordinates();
geoKoors.stammDatenId = reader.GetInt32(0);
geoKoors.position = reader.GetInt32(1);
geoKoors.latitude = reader.GetDouble(2);
geoKoors.longitude = reader.GetDouble(3);

resultSet.Add(geoKoors);
if (count > 10)
break;

count++;
}
reader.Close();

但正如您可能猜到的,我需要所有 17k 行。网络连接速度应该不是问题,因为服务器和我的客户端都在我们的局域网内,有 100 MBit 线路。从 SQL-Manager 将结果集保存到 csv 时,它只有 600 kb 大。

知道瓶颈可能在哪里以及如何解决这个问题吗?我不知道,代码的哪一部分可能与回答这个问题有关。如果您需要看一些特殊的部分,请在此处注明,我会提供。

最佳答案

什么样的超时?

你可能有:

  • SQL 超时。检查 SqlConnection/DataContext 上的 CommandTimeout
  • 事务超时,为您自己的 TransactionScopes 设置 TransacitonOptions.Timeout 或将以下 WCF 服务器的配置放在相关行为下

  • <serviceTimeouts transactionTimeout="00:10:00"/>

  • 或者它是 WCF 超时,这很可能是最有可能的,因为您会将所有数据转换为 XML,并且这些默认为 1 分钟。建议在客户端绑定(bind)上设置receiveTimeout。正如 marc_s 所说,您可能会遇到基于数据大小的其他问题(但不是超时),下面也有这样的示例:

  • .
    <wsHttpBinding>
    <binding name="PcsInterfaceSecureBinding" openTimeout="00:10:00" receiveTimeout="00:10:00"
    sendTimeout="00:10:00" maxBufferPoolSize="8000000" maxReceivedMessageSize="2147483647">
    <readerQuotas maxDepth="32" maxStringContentLength="65536000"
    maxArrayLength="2147483647" maxBytesPerRead="8192" maxNameTableCharCount="16384" />
    <security mode="Transport" />
    </binding>
    </wsHttpBinding>

    关于c# - 使用 WCF : Timeout 访问 SQL-Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305389/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com