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

WCF服务未捕获SAP系统请求的排查与修复方案咨询

排查与修复IIS托管WCF服务未接收SAP请求的问题

一、先确认IIS是否拦截请求

  • 查看IIS原始日志:默认路径为C:\inetpub\logs\LogFiles\W3SVC<站点ID>,找到SAP请求对应的记录,重点看状态码(4xx/5xx表示请求被拦截或处理失败),同时确认请求的URL、头信息是否正确。
  • 检查IIS请求筛选与URL重写规则:
    1. 打开IIS管理器,定位到目标站点,点击「请求筛选」,查看是否有规则限制了自定义头CallingType的长度、格式,或者直接拒绝了携带该头的请求。
    2. 查看「URL重写」模块,检查是否存在将请求重定向、改写或拒绝的规则,导致请求无法到达WCF服务。
  • 启用失败请求跟踪:
    站点右键→「配置」→「失败请求跟踪规则」,添加规则捕获4xx/5xx状态码的请求。生成的日志位于C:\inetpub\logs\FailedReqLogFiles,通过日志可以追踪请求在IIS各个模块的处理流程,精准定位拦截点。

二、WCF服务端配置与日志排查

  • 自定义头配置说明:
    如果WCF服务的契约没有强制要求携带CallingType头,不需要在web.config中额外配置。若服务逻辑需要读取该头,直接在代码中获取即可:
    // 在服务方法内读取自定义头
    var context = OperationContext.Current;
    var callingType = context.IncomingMessageHeaders.GetHeader<string>("CallingType", string.Empty);
    
    只有当WCF启用了严格的消息验证(如自定义行为限制头范围)时,才需要额外配置允许该头。
  • 开启WCF详细日志:
    在web.config的<system.serviceModel>节点下添加日志配置,记录完整的请求处理过程,判断请求是否到达WCF:
    <system.diagnostics>
      <sources>
        <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
          <listeners>
            <add name="svcTraceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:\WCFLogs\ServiceTrace.svclog" />
          </listeners>
        </source>
        <source name="System.ServiceModel.MessageLogging">
          <listeners>
            <add name="msgTraceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="D:\WCFLogs\MessageLog.svclog" />
          </listeners>
        </source>
      </sources>
    </system.diagnostics>
    <system.serviceModel>
      <diagnostics>
        <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="3000" />
      </diagnostics>
    </system.serviceModel>
    
    注意提前创建日志目录(如D:\WCFLogs),并给IIS应用池进程授予读写权限。之后用SvcTraceViewer.exe打开日志文件,即可查看请求是否到达WCF、是否存在消息解析错误。

三、抓包验证请求真实性

在WCF服务器上使用Wireshark或Fiddler抓包,确认SAP发送的请求确实包含CallingType头,且头的格式符合HTTP规范(比如大小写正确、无特殊字符干扰)。有时F5放行后,请求可能在传输环节被篡改,导致IIS或WCF无法正常解析。

四、排查安全工具的后续限制

除F5的请求头验证外,检查IIS上是否安装了其他安全模块(如URLScan、ModSecurity),查看这些模块的规则是否对CallingType头或请求本身进行了拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:36:30