我想在运行node.js的服务器上调用一个方法。
为此,我将SocketIO4Net.Client添加到我的C#项目中, 但我不知道你通过功能(回调)'通过方法Emit。
我尝试了几件事,但是我总是得到JS Exception' TypeError:object不是函数'。
服务器上的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)
答案 0 :(得分:1)
如果要将某些C#代码序列化从.NET交叉编译为JavaScript,请将其作为JSON数据包内的字符串传递给JavaScript服务器,然后将其解压缩并在服务器上运行(inject code生成通过客户端(不受保护)到服务器处理管道)然后设计中出现了问题。
第一个障碍是Node.js服务器理解JavaScript,而您要发送的代码段是用C#编写的
我建议您重新设计,检查一些典型的客户端 - 服务器方案的Web资源。
如果您对REST-style API不满意,可以考虑使用JSON-RPC。
REST vs JSON-RPC?提供了一些较旧的Stack Overflow讨论,其中哪一个更“好”。您可以找到一些有用的链接和相关问题