Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SocketIO4Net从.NET应用程序向node.js传递函数回调_C#_Javascript_Node.js_Socket.io - Fatal编程技术网

C# 使用SocketIO4Net从.NET应用程序向node.js传递函数回调

C# 使用SocketIO4Net从.NET应用程序向node.js传递函数回调,c#,javascript,node.js,socket.io,C#,Javascript,Node.js,Socket.io,我想在运行node.js的服务器上调用一个方法 为此,我将SocketIO4Net.Client添加到我的C#项目中, 但是我不知道你要通过Emit方法传递函数(回调) 我尝试了几种方法,但我总是得到一个JS异常“TypeError:object不是函数” 服务器上的JS(或此处) socket.on('getObjects',函数(回调){ loggerlogger.verbose(“socket.io如果您想序列化一些C代码,将其从.NET交叉编译为JavaScript,将其作为JSON数据

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

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

我尝试了几种方法,但我总是得到一个JS异常“TypeError:object不是函数”

服务器上的JS(或此处)

socket.on('getObjects',函数(回调){

loggerlogger.verbose(“socket.io如果您想序列化一些C代码,将其从.NET交叉编译为JavaScript,将其作为JSON数据包中的字符串传递给JavaScript服务器,然后将其解包并在服务器上运行(由客户端生成(未受保护)到服务器处理管道),则设计中存在错误

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

我建议您重新设计,检查一些典型客户机-服务器场景的web资源

如果你不满意,那么你可以考虑使用.


一些较老的堆栈溢出讨论关于哪一个更好"可以在上找到。您可以发现一些链接和相关的问题很有用

IMHO它只是一个回调而不是代码注入。它不会在服务器上运行。服务器将调用客户端来调用他的回调。@user1776231如果您发现您的设计很好,例如JSON-RPC没有用,那么我的答案可能根本没有什么用处。为了o了解“TypeError:object不是函数”的含义及其来源,您可以使用某种服务器端Node.js调试器并使用中断异常功能(IMHO)我正在考虑改变我的设计,但是我缺乏JS知识会减慢进度。@user1776231如果你不需要在这里和那里进行回调,只需要在这里发送一些JSON数据并返回一些JSON数据,那么你可以使用REST样式的API链接,设计你的接口和消息,而不需要“思考JavaScript”。如图所示,有两个C#端点交换JSON/XML数据包。客户端使用AJAX调用客户端。服务器通常不会自行将任何数据推送到web客户端。您可以利用
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");
}
/// <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)