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

登录后完整用户名未显示的DotNet WCF问题排查求助

问题排查:WCF服务返回不完整用户名

问题背景

我们基于DotNet WCF开发系统,当前使用DEV环境代码:

  • 将DEV数据库指向TEST数据库时,可正常显示完整用户名,怀疑问题出在WCF或存储过程输出参数未被WCF代码完整接收
  • 将DEV web.config中的端点地址指向TEST后可显示完整用户名,说明WEB应用本身无问题

目前输出仅显示名字(FirstName),而非完整用户名,需排查原因。


相关代码展示

WcfServiceSVC.cs 逻辑

public string GetEmpName(int employeeID)
{
    var credLogic = new Logic.Credentials.CredentialsLogic();
    var empName = credLogic.GetEmpName(employeeID);
    return empName;
}

Credentials Logic 代码

public string GetEmpName(int employeeId)
{
    string empName = string.Empty;

    Database abcDatabase;
    DbCommand abcCommand = null;

    try
    {
        abcDatabase = DatabaseFactory.CreateDatabase(abcConnectString);

        abcCommand = abcDatabase.GetStoredProcCommand("abc.ws_get_web_empname");
        abcCommand.CommandType = CommandType.StoredProcedure;

        // in参数
        abcDatabase.AddInParameter(abcCommand, "p_emp_id", DbType.VarNumeric, employeeId);

        // out参数
        abcDatabase.AddOutParameter(abcCommand, "p_emp_name", DbType.String, 65);

        // 执行存储过程
        abcDatabase.ExecuteNonQuery(abcCommand);
        empName = abcDatabase.GetParameterValue(abcCommand, "p_emp_name").ToString();

        // 已尝试的调试代码(注释状态):
        //empName = abcCommand.Parameters[0].Value.ToString();
        //Log("EmpId=" + employeeId.ToString() + ", EmpName: " + empName);
    }
    // 注:原代码缺少try-catch的闭合部分,需确认是否存在异常处理逻辑
}

存储过程代码

create or replace procedure ws_get_web_empname
     (
        p_emp_id     in number,
        p_emp_name   out varchar2
     )
  as
  begin

       select name_formatted_pcl
     into p_emp_name
         from people
         where people_id = p_emp_id;
       exception
         when NO_DATA_FOUND then
           p_emp_name := '';    
  end;

排查建议

  1. 验证DEV数据库数据源:直接在DEV数据库执行存储过程abc.ws_get_web_empname,传入对应employeeId,确认p_emp_name返回值是否为完整用户名。若数据库端仅返回FirstName,问题出在数据或存储过程的数据源上。
  2. 检查输出参数长度限制:Credentials Logic中AddOutParameter设置的长度为65,确认DEV数据库name_formatted_pcl字段的实际长度,若完整用户名超过65字符会被截断,需调整参数长度至匹配字段长度。
  3. 启用调试日志:取消注释Credentials Logic中的日志代码,执行后查看日志记录的empName值。若日志中是完整用户名但WCF返回不完整,说明WCF传输/序列化环节有问题;若日志里就是FirstName,说明存储过程返回给逻辑层的数据本身不完整。
  4. 检查WCF绑定配置:确认DEV环境WCF服务的绑定(如basicHttpBinding)是否设置了消息大小或字符串长度约束,导致返回值被截断。
  5. 完善异常处理:补全Credentials Logic中try-catch的闭合逻辑,检查是否存在未捕获的异常导致empName未被正确赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:40:28