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

使用SMBLibrary调用ListShares时遇STATUS_USER_SESSION_DELETED错误

解决SMBLibrary调用ListShares()返回STATUS_USER_SESSION_DELETED的问题

我之前也碰到过类似的SMB会话异常问题,结合SMBLibrary的工作逻辑和常见的服务器配置坑,给你几个具体的排查和解决方向:

1. 补全登录时的域名/工作组参数

你当前调用Login时第一个参数传了空字符串,很多SMB服务器(尤其是加入域或有明确工作组设置的环境)需要指定正确的域名或工作组才能维持有效会话。试试把这个参数改成服务器所在的工作组或域名:

// 替换成实际的工作组/域名,比如默认的WORKGROUP
var status = client.Login("WORKGROUP", "user", "pass");

如果不确定具体值,可以在命令行执行net view \\192.21.1.40查看服务器的工作组信息,或者咨询服务器管理员。

2. 指定兼容的SMB协议版本

部分服务器会限制SMB协议的版本,默认自动协商可能会出现会话不稳定的情况。你可以在连接后、登录前强制指定SMB版本:

var success = client.Connect(System.Net.IPAddress.Parse("192.21.1.40"), SMBTransportType.DirectTCPTransport);
if (success)
{
    // 强制使用SMB 2.1或3.0,根据服务器支持情况选择
    client.SMB2Dialect = SMB2Dialect.SMB210;
    var status = client.Login("WORKGROUP", "user", "pass");
    // ... 后续代码
}

3. 检查会话超时与权限配置

  • 会话超时问题:有些服务器会设置较短的空闲会话超时,如果你登录后间隔了一段时间才调用ListShares,可能会话已经被服务器回收。试试登录后立即执行列表查询。
  • 用户权限不足:虽然登录返回成功,但该用户可能没有获取共享列表的权限(比如需要SeNetworkLogonRight权限)。可以先用管理员账号测试,确认是否是权限问题。

4. 调试获取更详细错误信息

建议你打印actionStatus的具体值,有时候能得到比主错误码更详细的提示:

var shares = client.ListShares(out var actionStatus);
Console.WriteLine($"ListShares Status: {actionStatus}");

5. 排查网络层面干扰

防火墙、路由设备可能会中断空闲的SMB会话,导致会话被标记为已删除。可以临时关闭客户端或服务器的防火墙测试,或者确保SMB默认端口445的通信没有被拦截。

内容的提问来源于stack exchange,提问作者vishwas-trivedi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:07:01