文档章节

使用Edge.js,在JavaScript中调用C# .Net

yushulx
 yushulx
发布于 2014/10/28 10:54
字数 415
阅读 373
收藏 10

Edge.js能够让开发者在JavaScript中调用C#的接口,提高应用的扩展能力。这里介绍如何调用C#接口获取图片数据,并通过Node.js搭建的WebSocket server发送到Web客户端。

参考:How to Use Edge.js to Empower WebSocket Solutions in JavaScript

通过.Net接口获取图片返回给JavaScript

先看下单纯使用JavaScript来load本地图片可以这样:

var fs = require('fs');
fs.readFile('Capture.jpg', function(err, data) {
  console.log(data.length); // image data
});
 

要使用Edge.js,使用下面的命令来安装:

npm install edge

创建C#文件nativeImageLoader.cs

#r "System.Drawing.dll"
using System.Threading.Tasks;
using System.Drawing;
 
public class Startup
{
    public async Task<object> Invoke(object input)
    {   
        byte[] imageBuffer;
        Image image = Image.FromFile("Capture.jpg");
        using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
        {
            image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            imageBuffer = stream.GetBuffer();
        }
 
        return imageBuffer;
    }
}
 

在默认情况下,edge加载的系统dll只有mscorlib.dll and System.dll,因此需要通过#r “System.Drawing.dll”手动添加。

现在在JavaScript层就可以获取图像了:

var nativeImageLoader = edge.func(require('path').join(__dirname, 'nativeImageLoader.cs'));
nativeImageLoader('load', function(error, result) {
            if (error) throw error;
            // result is the loaded image
 });
 

使用Node.js创建WebSocket解决方案

首先安装WebSocket包:

npm install ws

几行代码搞定server的图像数据发送:

var WebSocketServer = require('ws').Server,
    wss = new WebSocketServer({
        port: 8080
});
wss.on('connection', function(ws) {
    ws.on('message', function(message) {
        console.log('Received: %s', message);
        nativeImageLoader('load', function(error, result) {
            if (error) throw error;
            ws.send(result); // send the captured image
        });
    });
});
 

运行server:

node server.js

在客户端中接收数据:

var ws = new WebSocket("ws://127.0.0.1:8080/");     
ws.binaryType = "arraybuffer";
 
ws.onopen = function() {    
   alert("Opened");    
   ws.send("I'm Dynamsoft");    
};    
 
ws.onmessage = function (evt) {     
    var bytes = new Uint8Array(evt.data);
    var data = "";
    var len = bytes.byteLength;
    for (var i = 0; i < len; ++i) {
        data += String.fromCharCode(bytes[i]);
    }
    var img = document.getElementById("image");
    img.src = "data:image/png;base64,"+window.btoa(data);   
};    
 
ws.onclose = function() {    
   alert("Closed");    
};    
 
ws.onerror = function(err) {    
   alert("Error: " + err);    
};
 

打开client.htm可以看到收到的数据:

源码

https://github.com/DynamsoftRD/WebSocket-in-JavaScript

git clone https://github.com/DynamsoftRD/WebSocket-in-JavaScript.git


本文转载自:http://www.codepool.biz/websocket/empower-websocket-solutions-in-javascript.html

yushulx
粉丝 28
博文 106
码字总数 60640
作品 0
杭州
私信 提问
.NET Core开发日志——Edge.js

最近在项目中遇到这样的需求:要将旧有系统的一部分业务逻辑集成到新的自动化流程工具中。这套正在开发的自动化工具使用的是C#语言,而旧有系统的业务逻辑则是使用AngularJS在前端构建而成。...

Ken.W
2018/10/20
0
0
C#代码与javaScript函数的相互调用

问: 1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的已有变量? 4.如何在C#中访问JavaScript函数? 问题1答案如下: javaScript函数中执行C#代码...

孟宪迎
2009/12/27
164
0
Unity3D中JavaScript与C#对比

第一节 在使用unity3d进行游戏开发或者互动项目制作的时候,有3种编辑语言可供使用,不过用的最多的应该是javascript和c#两种语言,相信很多朋友特别是新手都会很纠结于到底该用二者种的哪一...

dangnianmingyue_gg
2016/03/22
0
0
PhoneGap 的 WP7 技巧: 编写 PhoneGap 插件用来发送短信

在这篇文章红,将展示如何在 Windows Phone 上使用 PhoneGap 开发发送短信的应用,我们将通过 Microsoft.Phone.Tasks 命名空间中的 SMSCompose 来实现。PhoneGap 有实现对之进行封装的插件。...

红薯
2011/12/28
1K
3
使用javascript开发windows phone应用的相关问题

1、使用angularjs和winjs时的兼容问题 1、开启scp模式 <html ng-app="app" ng-csp><!-- Enables CSP (Content Security Policy) support --> 2、使用winjs提供的垫片文件 使在winjs内无法使用......

Arrowing
2014/10/19
0
1

没有更多内容

加载失败,请刷新页面

加载更多

一个简单易用的Linux文本编辑器:nano的安装与使用

许多状况下咱们都必要编纂云主机里的文本情节,而现时用的比力多的文本编纂器是vim,这个估量许多人都以为很难用,这边伏笔VPS引荐一个简略易用的文本编纂器nano,比vim简略许多,很轻易上手...

shzwork
15分钟前
0
0
go recover

异常、错误常见语言处理 一般语言都有其错误处理方式,就以鄙人熟悉的php来距离吧。 PHP有多个级别的错误处理方式,以防止程序在还未正确执行完毕时,就造成了程序的提前结束。 try/catch/fi...

o0无忧亦无怖
33分钟前
0
0
玩转混合云+边缘计算,且看ZStack Mini!

文章导读:2019年4月16日,ZStack新品和合作伙伴战略发布会上,面向集团客户和边缘场景需求,ZStack重磅推出ZStack Mini超融合一体机(以下简称:ZStack Mini)和ZStack多云管理平台(以下简...

ZStack社区版
35分钟前
0
0
springboot 整合redis

springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> ...

jason_kiss
39分钟前
2
0
手机耗电问题,大部分是没有正确使用这个“锁”

当安卓设备闲置时,设备很快会进入休眠状态,以达到省电和减少CPU占用的目的。但有些应用在手机灭屏甚至系统休眠时,依然频繁占用CPU处理事件或唤醒屏幕提示用户消息,这类行为会导致手机耗电...

安卓绿色联盟
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部