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
相关产品推荐
相关产品推荐

