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

.Net Core 3.1 Serilog在IIS10服务器失效,本地正常,跨版本调用问题排查

问题描述

我们在.NET Core 3.1解决方案中实现了全局日志功能,通过以下代码从.NET Framework 4.7.2解决方案发送错误详情:

string URL = Convert.ToString(ConfigurationManager.AppSettings["netCoreSolutionURL"]) + "AppLogging/LogCSharpError"; 
using (var client = new HttpClient()) {
   client.DefaultRequestHeaders.Accept.Clear();
   client.DefaultRequestHeaders.Accept.Add(new 
   MediaTypeWithQualityHeaderValue("application/json"));
   var response = client.PostAsync(URL, new 
   StringContent(JsonConvert.SerializeObject(appLog).ToString(), Encoding.UTF8,"application/json")).Result; 
   //var responseString = response.Content.ReadAsStringAsync().Result; 
}

本地环境下一切正常,错误详情可写入对应日志文件夹;但部署到IIS10服务器后,.NET Framework 4.7.2发送的错误无日志记录,事件查看器也无报错,且已给日志文件夹完全权限(日志解决方案自身触发的应用启动日志可正常记录)。请排查是否遗漏服务器配置、安全协议或其他相关设置?(我们使用Serilog记录错误及信息)


排查方案

可能的问题点及解决办法

  • TLS版本兼容性问题
    .NET Framework 4.7.2默认可能未启用TLS 1.2,而IIS10上的.NET Core应用可能仅支持TLS 1.2及以上版本。在HttpClient初始化前添加代码强制启用TLS 1.2:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    
  • HttpClient同步调用死锁
    代码中使用.Result同步调用异步方法,在IIS环境下易导致死锁,请求无法发送。改为异步调用:

    using (var client = new HttpClient()) {
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var response = await client.PostAsync(URL, new StringContent(JsonConvert.SerializeObject(appLog).ToString(), Encoding.UTF8,"application/json"));
        // 取消注释查看响应内容,排查请求状态
        var responseString = await response.Content.ReadAsStringAsync();
    }
    

    同时确保调用该代码的方法标记为async Task,避免使用async void。

  • 应用池权限与网络访问

    • 检查.NET Framework应用的应用池身份(如ApplicationPoolIdentity)是否具备访问目标.NET Core API的网络权限
    • 验证服务器DNS解析或hosts文件配置,确保netCoreSolutionURL能正确解析到目标服务器
  • IIS请求限制与防火墙拦截

    • 检查IIS10上的.NET Core应用是否配置了允许POST请求到AppLogging/LogCSharpError路径的请求筛选规则
    • 确认服务器防火墙(Windows防火墙或硬件防火墙)未拦截两台服务器之间的HTTP/HTTPS通信
  • Serilog配置差异
    服务器上的Serilog配置可能与本地不同,存在过滤规则导致接收的日志被丢弃。检查.NET Core应用的Serilog配置,确保未排除API请求提交的日志条目。

  • URL配置错误
    验证服务器上netCoreSolutionURL配置的地址是否正确,包括协议(http/https)、端口(非默认时),避免因URL无效导致请求失败。可在代码中添加日志记录当前使用的URL,便于排查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:15:05