修改报表查询后无法查看,伴WCF通信及端点错误求助
问题排查与解决方案
一、查询语句核心问题修正
你的Oracle查询存在类型不匹配和隐式转换风险,这大概率是触发报表服务通信错误的根源(查询执行异常导致服务端处理失败,进而抛出WCF通信类错误)。以下是修正后的查询:
WHERE Highlights.FSR_ID = Contacts.mmm_EMPLOYEE_ID AND Highlights.AC_ID = AC.ID AND AC.MODEL_ID = Model.ID AND AppLookup.ID = Highlights.NOTIFICATION_LEVEL_ID AND ( Highlights.DATE_CREATED BETWEEN CASE -- 用Oracle原生DATE类型做比较,避免字符串隐式转换错误 WHEN :startDate = TO_DATE('01/01/1800', 'MM/DD/YYYY') THEN TRUNC(CURRENT_DATE, 'IW') - 14 -- 统一字段类型:若DATE_CREATED是DATE类型则用TO_DATE,是TIMESTAMP则用TO_TIMESTAMP ELSE TO_DATE(:startDate, 'MM/DD/YYYY') END AND CASE WHEN :endDate = TO_DATE('01/02/1800', 'MM/DD/YYYY') THEN TRUNC(CURRENT_DATE, 'IW') - 1 ELSE TO_DATE(:endDate, 'MM/DD/YYYY') END ) AND Contacts.ID = :FSR_ID
关键修正点:
- 参数类型匹配:将字符串格式的默认日期改为Oracle原生DATE类型,避免报表DateTime类型参数与字符串的隐式转换异常。
- 统一字段类型:确保
BETWEEN前后的表达式类型与Highlights.DATE_CREATED一致(DATE或TIMESTAMP),消除类型不匹配导致的执行错误。 - 简化格式冗余:Oracle DATE类型默认包含午夜时间,无需额外指定
12:00:00 AM。
二、报表服务通信错误排查步骤
若修正查询后仍出现WCF相关错误,按以下步骤排查:
- 重启报表服务:停止并重启在线报表服务(如SSRS),清理服务端故障会话。
- 检查端点配置:确认报表预览服务的
net.pipe端点配置正确,服务运行账户有足够权限访问该端点。 - 查看服务端日志:在报表服务器日志目录(如SSRS的
C:\Program Files\Microsoft SQL Server\MSRSxx.MSSQLSERVER\Reporting Services\LogFiles)查找详细错误信息,定位具体服务端异常。 - 验证参数类型:确认报表的
startDate和endDate参数类型为DateTime而非字符串,避免参数传递时的类型转换错误。
内容的提问来源于stack exchange,提问作者Nafew Nowshad
相关产品推荐
相关产品推荐

