使用SocketIO4Net从.NET应用程序传递函数callback到node.js

我想在运行node.js的服务器上调用一个方法。

为此我添加了SocketIO4Net.Client到我的C#项目,但我不知道你通过'函数(callback)'通过方法Emit。

我尝试了几个东西,但我总是得到JSexception'TypeError:对象不是一个函数'。

JS服务器(或在这里https://github.com/hobbyquaker/ccu.io/blob/master/ccu.io.js#L1756 )

socket.on('getObjects', function(callback) { loggerlogger.verbose("socket.io <-- getObjects"); callback(regaObjects); }); 

代码在客户端

 public Task<string> GetObject() { Console.WriteLine("Send GetObject"); var taskCompletionSource = new TaskCompletionSource<string>(); dynamic doStuffJs = new Action(() => Console.WriteLine("Hello 0")); _client.Emit("getObjects", doStuffJs, null, new Action<Object>(Callback)); return taskCompletionSource.Task; } private void Callback(object o) { Console.WriteLine("Hello 1"); } 

Doku方法发射

 /// <summary> /// <para>Asynchronously sends payload using eventName</para> /// <para>payload must a string or Json Serializable</para> /// <para>Mimicks Socket.IO client 'socket.emit('name',payload);' pattern</para> /// <para>Do not use the reserved socket.io event names: connect, disconnect, open, close, error, retry, reconnect</para> /// </summary> /// <param name="eventName"></param> /// <param name="payload">must be a string or a Json Serializable object</param> /// <remarks>ArgumentOutOfRangeException will be thrown on reserved event names</remarks> public void Emit(string eventName, dynamic payload, string endPoint = "", Action<dynamic> callback = null) 

如果你想序列化一些C#代码,把它从.NET交叉编译成JavaScript,把它作为一个JSON数据包中的string传递给一个JavaScript服务器,然后将它解包并在服务器上运行( 将客户端生成的代码 (不受保护)服务器处理pipe道),那么在devise中就有问题了。

第一个障碍是Node.js服务器理解JavaScript,而你想发送的代码片段是用C#

我build议您重新devise这个devise,检查一些典型的客户端 – 服务器场景的networking资源。

如果您对REST风格的API不满意,那么您可以考虑使用JSON-RPC 。

REST vs JSON-RPC提供了一些关于哪个更好的Stack Overflow讨论? 。 你可以find一些有用的链接和相关的问题