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

