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

C#实现LSP向VS Code发送初始化响应报错的技术问询

问题:LSP初始化响应在VS Code中触发头部格式错误

我用C#构建Language Server Protocol(LSP)服务,当前正在配置初始化请求的响应逻辑。服务可以正确接收JSON-RPC消息,但向Visual Studio Code返回响应时出现异常。

相关代码

case "initialize":
    var request = new InitializeRequest();

    try
    {
        request = JsonSerializer.Deserialize<InitializeRequest>(content);

        if (request != null)
        {
            logger.Log("Deserialization successful!");
            logger.Log($"ClientInfo Name: {request.Params.ClientInfo.Name}");
            logger.Log($"ClientInfo Version: {request.Params.ClientInfo.Version}");
            InitializeResponse msg = new InitializeResponse("2.0", request.ID);
            var reply = Rpc.EncodeMessage(msg);
            logger.Log("Replying With: " + reply.ToString());
            Console.WriteLine(reply);
            logger.Log("Replied!");
        }
    }
    catch (Exception e)
    {
        logger.Log("Error: " + e.Message);
    }
    break;

EncodeMessage方法实现

public static string EncodeMessage(object message)
{
    try
    {
        string content = JsonSerializer.Serialize(message);
        string header = $"Content-Length: {Encoding.UTF8.GetByteCount(content)}\r\n\r\n";
        string encodedMessage = header + content;
        Program.logger.Log("Serialized Content: " + content);
        Program.logger.Log("Header: " + header);
        Program.logger.Log("Encoded Message: " + encodedMessage);
        return encodedMessage;
    }
    catch (Exception e)
    {
        Program.logger.Log("Error in EncodeMessage: " + e.Message);
        return null;
    }
}

日志输出

2024-06-13 16:36:57 [ScarbroScriptLSP] Content Before Encode: {"result":{"capabilities":{},"serverInfo":{"name":"ScarbroScriptLSP","version":"0.0.1"}},"jsonrpc":"2.0","id":0}
2024-06-13 16:36:57 [ScarbroScriptLSP] Header: Content-Length: 112

2024-06-13 16:36:57 [ScarbroScriptLSP] Encoded Message: Content-Length: 112

{"result":{"capabilities":{},"serverInfo":{"name":"ScarbroScriptLSP","version":"0.0.1"}},"jsonrpc":"2.0","id":0}
2024-06-13 16:36:57 [ScarbroScriptLSP] Replying With: Content-Length: 112

{"result":{"capabilities":{},"serverInfo":{"name":"ScarbroScriptLSP","version":"0.0.1"}},"jsonrpc":"2.0","id":0}
2024-06-13 16:36:57 [ScarbroScriptLSP] Replied!

VS Code抛出的错误

[Error - 5:00:31 PM] Client Scarbro Script LSP: connection to server is erroring.

Message header must separate key and value using ':' initialize

Shutting down server.

[Error - 5:00:31 PM] Stopping server failed

我之前曾把serverinfo写错为serverInfo,但修正后问题仍未解决。我猜测可能是JSON字段顺序问题(比如"jsonrpc":"2.0","id":0需要放在最前面),但不确定VS Code的序列化是否会受字段顺序影响,特此求助。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:35:12