【问题标题】:Have JS code, but need to call it from C#有JS代码,但需要从C#调用
【发布时间】:2013-03-17 00:03:45
【问题描述】:

我有一个大的 .js 文件,其中包含一个函数和一个方法。我对 JS 很熟悉。我有一个 WCF web 方法,我想调用这个 js 方法... JS 文件中的示例是这样调用的:

var wmm = new WorldMagneticModel();

then

var dec = wmm.declination(0.0, 59.0, -2.0, 2010.5);

我在 js 文件中看到函数中的方法调用:

WorldMagneticModel.prototype.declination = function(altitudeKm, latitudeDegrees, longitudeDegrees, yearFloat)

我希望此方法可用于我的 c# Web 服务。有什么办法吗?也许我需要做一个ASP.net页面,嵌入js,然后调用它?

希望有人可以提供帮助。

【问题讨论】:

  • 您想从 C# web 服务调用客户端浏览器上的 Javascript?可以从许多客户端调用 WCF 服务,但不保证会涉及到浏览器
  • 您希望在您的应用程序的事件模型中何时调用它?服务器端代码如何知道何时何地在客户端调用某些东西?您对 Web 应用程序的请求/响应性质缺乏基本的了解。客户端发出请求,服务器代码在服务器上运行以响应该请求,最终将响应返回给客户端。至此,服务器端代码就完成了。客户端完全断开连接。客户端代码需要被客户端事件(其他客户端代码)调用。
  • 你指的是Java WorldMagneticModel吗? Java 和 JavaScript 完全不同
  • @Basic - 没有。这是一个js文件。 bdcc.co.uk/Gmaps/WorldMagneticModel.js
  • @Craig:您或许可以将功能移植到 C#。或者,也许使用 node.js 之类的东西在另一个服务器端应用程序中运行代码,而您的 .NET 应用程序会将该其他应用程序称为服务。 (本质上,.NET 应用程序将是“客户端”,节点应用程序将是“服务器”,它们只是在同一台机器上运行。)不过,这主要是推测。我从来没有真正这样做过。

标签: c# javascript wcf


【解决方案1】:

如果你想在服务器端运行它,你可以使用Jint:

JintEngine engine = new JintEngine();
// source should be a string containing the contents of your JavaScript file
engine.Run(source);
engine.SetParameter("altitudeKm", altitudeKm);
engine.SetParameter("latitudeDegrees", latitudeDegrees);
engine.SetParameter("longitudeDegrees", "longitudeDegrees");
engine.SetParameter("yearFloat", yearFloat);
var result = engine.Run(@"
    var wmm = new WorldMagneticModel();
    return wmm.declination(altitudeKm, latitudeDegrees, longitudeDegrees, yearFloat);
");
return result;

【讨论】:

  • “engine.Run(source)”中的“source”是什么?一个 JS 文件?
  • @Craig: source 应该是您的 WorldMagneticModel.js 文件的内容。
  • 谢谢。我在项目的 js 文件中有它 - 我可以将内容读入字符串,然后像这样加载吗?这样我的 c# 文件中就不必有大量的 js 了吗?
  • 获取“解析脚本时发生意外错误”。参数是否应该以某种方式参数化?参数如何插入到 engine.run 中?
  • @Craig:不幸的是,我没有亲自使用 Jint,所以我不知道为什么它不起作用。也许尝试一小段代码,看看它失败了。
猜你喜欢
  • 2013-12-29
  • 1970-01-01
  • 2013-08-12
  • 2021-04-18
  • 2010-09-25
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
相关资源
最近更新 更多