c# - 使用 SocketIO4Net 将函数回调从 .NET 应用程序传递到 node.js

标签 c# javascript node.js socket.io

我想调用运行 Node.js 的服务器上的方法。

为此,我将 SocketIO4Net.Client 添加到我的 C# 项目中, 但我不知道您是否通过 Emit 方法传递“函数(回调)”。

我尝试了几种方法,但是我总是收到 JS 异常“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");
}

Emit 方法的 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 数据包内的字符串传递到 JavaScript 服务器,然后将其解压并在服务器上运行( inject code 由客户端生成(不 protected )到服务器处理管道)那么设计就有问题。

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

我建议您重新设计,检查一些网络资源以了解典型的客户端-服务器场景。

如果您对REST-style API不满意那么你可以考虑使用JSON-RPC .

一些关于哪个“更好”的较旧的 Stack Overflow 讨论可以在 REST vs JSON-RPC? 找到。 。您会发现一些有用的链接和相关问题

关于c# - 使用 SocketIO4Net 将函数回调从 .NET 应用程序传递到 node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23592022/

相关文章:

javascript - IE 7 中的 javascript NaN 是什么原因导致的?

node.js - 引用错误: number is not defined in MEAN

在 Windows Azure 模拟器中运行的 Node.js Web 应用程序

javascript - 找不到模块 axios - 与 typescript 的兼容性问题

c# - 如何在 c# 中的打包记录中读取固定大小字符串的 Delphi 数组

c# - 自定义用户控件 - 如何添加类型为 Dictionary<int, Color> 的代码集合编辑器

c# - 通过有效的 xpath 在 XmlDocument.SelectSingleNode 上返回 Null

C#跨线程操作报错

javascript - Bootstrap 不适当的表单格式

javascript - ReactJS-Java 脚本 : Image is not properly showing inside a <div>