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

使用WebClient.UploadValues时出现FatalExecutionEngineError问题

问题分析与修复方案

针对你遇到的FatalExecutionEngineError致命运行时错误,结合代码和场景,给出以下具体修复思路:

1. 修复WebClient资源泄漏问题

WebClient实现了IDisposable接口,循环中每次创建实例却不释放,会导致底层资源堆积,长期运行可能触发CLR底层错误。修改send方法,用using语句自动释放资源:

public void send() {               
    using (var client = new WebClient())
    {
        client.Headers.Add("User-Agent", "Mozilla/5.0");
        client.Headers.Add("Test", "GameClient1");

        var returnedBytes = client.UploadValues("https://example.com/play.php", "POST", NameValueCollection);

        var serverOutputString = Encoding.UTF8.GetString(returnedBytes);

        /* more */
    }
}

2. 替换为更稳定的HttpClient(推荐)

WebClient是较老旧的API,HttpClient是.NET官方推荐的HTTP客户端,资源管理更高效,尤其适合循环调用场景。注意**HttpClient应该全局单例复用**,不要每次请求都创建:

// 全局单例HttpClient,仅初始化一次
private static readonly HttpClient _httpClient = new HttpClient();
private static readonly NameValueCollection _formData = new()
{
    {"id", "1"},
    {"level", "100"},
    {"exp", "512"},
    {"points", "3453457"}
};

// 静态构造函数中初始化请求头
static YourClassName()
{
    _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0");
    _httpClient.DefaultRequestHeaders.Add("Test", "GameClient1");
}

// 改用异步方法,避免线程阻塞
public async Task SendAsync()
{               
    var formContent = new FormUrlEncodedContent(
        _formData.AllKeys.ToDictionary(key => key, key => _formData[key])
    );
    var response = await _httpClient.PostAsync("https://example.com/play.php", formContent);
    response.EnsureSuccessStatusCode(); // 可选:确保请求返回成功状态码
    var serverOutputString = await response.Content.ReadAsStringAsync();

    /* more */
}

线程循环中可以用await Task.Delay(X * 1000)替代Sleep(),避免线程长期阻塞。

3. 强制指定TLS版本

如果目标站点使用了过时的SSL/TLS协议,可能导致底层握手错误。在程序启动时添加以下代码,强制使用现代TLS版本:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

4. 排查非托管代码问题

如果你的程序中存在PInvoke调用或COM组件交互,这类代码的内存管理错误(比如未释放非托管资源、封送数据错误)会直接破坏CLR运行时。需要逐一检查所有非托管交互代码,确保资源释放和数据封送的正确性。

5. 系统级排查

  • 修复或重新安装.NET Framework:运行dotnet repair tool修复损坏的框架文件
  • 更新系统补丁:部分CLR致命错误是系统级漏洞导致的,安装最新系统补丁可解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:45:56