尝试在 .net core web api 上运行 ASE sql (sybase) 时出错“不允许发送或接收数据的请求......”

Posted

技术标签:

【中文标题】尝试在 .net core web api 上运行 ASE sql (sybase) 时出错“不允许发送或接收数据的请求......”【英文标题】:Error trying to run ASE sql (sybase) on .net core web api "A request to send or receive data was disallowed ..." 【发布时间】:2021-04-10 10:39:41 【问题描述】:

当我运行这个 SQL 时,我得到了这个错误

这是我运行的第二个 SQL,但我尝试运行第一个 SQL,它运行了两次并连续运行,它运行良好,所以可能不是开放连接问题?

发送或接收数据的请求被拒绝,因为套接字未连接并且(当使用发送调用在数据报套接字上发送时)没有提供地址。

上次我在非常相似的代码中遇到该错误,是因为我在 args 部分的变量名中留下了“@”。

所以我强烈怀疑这是“您的 SQL 调用代码以某种方式搞砸了”或“返回 0 行”的一般错误(伙计,我希望不是后者)

public List<EnrTypeSepInfoCV> GetEnrTypeSepInfo(long enrId)

    var aseSqlConnectionString = configuration.GetConnectionString("SybaseDBDapper");

    string sql = "";

    sql += "select et.enrtype_id, ";
    sql += " et.active as stud_status, ";
    sql += " s.sep_dt ";
    sql += "from enrollment_type et,separation s ";
    sql += "where et.enrtype_id *= s.enrtype_id ";
    sql += "and et.enr_id = @al_enr_id  ";

    dapperTools.DapperCustomMapping<EnrTypeSepInfoCV>();

    try
    
        using (IDbConnection db = new AseConnection(aseSqlConnectionString))
        
            var arguments = new
            
                @al_enr_id = enrId
            ;

            List<EnrTypeSepInfoCV> ll = new List<EnrTypeSepInfoCV>();

            ll = db.Query<EnrTypeSepInfoCV>(sql, arguments).ToList();
            return ll;
        
    
    catch (Exception ex)
    
        Trace.WriteLine(ex.ToString());
        return null;
    

如果我拉出 SQL,用传入的值替换变量,一切正常。

我逐行查看,将其与有效的 SQL 调用方法进行比较,我看不出有任何差异。 有谁知道我做错了什么?

有没有办法在这种情况下获得更多信息错误?

如果重要的话,我正在编写一个 .Net Core Web API 服务,供针对 Sybase DB v12.* 运行的 Vue 应用使用。

我还有其他 API 方法可以正常工作,它们以相同的方式调用数据库。

这是我的数据对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace SpProofOfConceptAPI.Dto


    public class EnrTypeSepInfoCV
    
        [Dapper.Column("enrtype_id")]
        public Int64 EnrTypeId  get; set; 

        [Dapper.Column("stud_status")]
        public string StudStatus  get; set; 

        [Dapper.Column("sep_dt")]
        public DateTime? SepDt  get; set; 
    

【问题讨论】:

【参考方案1】:

好的,

因此,此消息似乎是一般的“连接出现问题”消息。

就我而言,这是连接超时到期。默认是 15s,我把它改成 600s,它工作正常。 (我们有一些长期运行的报告可能需要很长时间)

由于它在 ASE 上,我只是添加了“连接超时 = 600;”。

【讨论】:

以上是关于尝试在 .net core web api 上运行 ASE sql (sybase) 时出错“不允许发送或接收数据的请求......”的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web API DELETE 调用返回 405

基于 .NET Framework 的 .NET Core 2.1 Web API 的授权问题

在 Elastic Beanstalk 上使用 Docker 部署 .NET Core Web API

为 ASP.Net Core Web API 项目创建要在启动时转到的索引页面

如何在 ASP Net Core Web API 上正确地将列表转换为 IQueryable

.NET Core Web APi类库如何内嵌运行?