You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用SOAP API出现CS7036错误,参数传递存疑

问题分析

CS7036错误直接指向参数不匹配:你调用PI_SClient.updatePaymentStatusAsync时传入了一个updatePaymentStatusRequest对象,但该方法实际要求传入5个独立参数(paymentStatusSearchCriteria、w3cReconciliationDate、action、additionalPaymentInformation、auditLogInfo),两者完全不匹配。

从你提供的代码来看:

  • 你手动封装了updatePaymentStatusRequest对象,但PI_SClient的updatePaymentStatusAsync并没有接受该对象的重载;
  • 你看到的那个“自动生成的多参数updatePaymentStatusAsync”,是属于PaymentServiceStronglyTypedType类的方法,并非PI_SClient的方法。
解决方案

有两种直接的修复方式:

方式一:拆分request对象,传入独立参数

修改HRP_API方法,从传入的spType中提取各个属性,按要求传给Client的方法:

public static Task<XML_Rootobject.updatePaymentStatusResponse> HRP_API(XML_Rootobject.updatePaymentStatusRequest spType)
{
    // ... 保留原有初始化代码
    return PI_SClient.updatePaymentStatusAsync(
        spType.criteria,
        spType.w3cReconciliationDate,
        spType.action,
        spType.additionalPaymentInformation,
        spType.auditLogInfo
    );
}

注意:不要用.GetAwaiter().GetResult()强行同步化异步操作——你的方法返回Task<>类型,上层调用又用了await,直接返回Task即可,同步阻塞会破坏异步流程,甚至引发死锁。

方式二:调用支持request对象的重载

如果你想直接传入封装好的request对象,可以将PI_SClient转换为PaymentServiceStronglyTypedType类型后调用对应方法:

public static Task<XML_Rootobject.updatePaymentStatusResponse> HRP_API(XML_Rootobject.updatePaymentStatusRequest spType)
{
    // ... 保留原有初始化代码
    return ((XML_Rootobject.PaymentServiceStronglyTypedType)PI_SClient).updatePaymentStatusAsync(spType);
}

同样,不要用同步阻塞的方式获取结果,直接返回Task即可。

额外提示
  • 检查自动生成的Client代码,确认updatePaymentStatusAsync的所有重载,避免混淆不同类的同名方法;
  • SSIS环境下尽量保持异步流程的一致性,避免同步/异步混用引发异常。

内容的提问来源于stack exchange,提问作者mdolunt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:55:53