通过Web套接字服务csharp-language-server-protocol实例

我正在使用csharp-language-server-protocol实现来创建自定义语言服务器,并且效果很好(请参见LSP)。

唯一的问题是,我找不到使用.Net将服务器使用的输入/输出流连接到 websocket 的好方法(我希望它可以用作远程语言服务器,因此我可以使用网络套接字连接到该服务器)。

我已经完成了自己的连接器,并且可以使用:

  • 它从Web套接字获取消息并将其写入输入流
  • 它从输出流中读取消息并通过Web套接字发送它们

但是我确信必须有一个我无法找到的现有解决方案。

我尝试过vs-streamjsonrpc,但我认为这不是我所需要的。

我也尝试过Nerdbank.Streams#AsStream,但没有运气(请参见下面的异常):

(...)
var websocket = await context.WebSockets.acceptWebSocketasync();
var inOutStream = webSocket.AsStream();
var languageServer = await LanguageServer.From(options => options
    .WithInput(inOutStream)
    .WithOutput(inOutStream)
    ...

System.ArgumentException: 'Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.'

This exception was originally thrown at this call stack:
    System.ThrowHelper.ThrowArraySegmentCtorValidationFailedExceptions(System.Array,int,int)
    Nerdbank.Streams.WebSocketStream.ReadAsync(byte[],System.Threading.CancellationToken)
    System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    System.Runtime.CompilerServices.Taskawaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
    System.Runtime.CompilerServices.Taskawaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
    Nerdbank.Streams.WebSocketStream.Read(byte[],int)
    OmniSharp.Extensions.JsonRpc.InputHandler.ProcessInputStream()
    System.Threading.ThreadHelper.ThreadStart_Context(object)

有人举榜吗? 有提示吗?

iCMS 回答:通过Web套接字服务csharp-language-server-protocol实例

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2176612.html

大家都在问