【问题标题】:Calling C# function from VBScript function in Web UI在 Web UI 中从 VBScript 函数调用 C# 函数
【发布时间】:2014-12-02 22:01:23
【问题描述】:

我需要从 Microsoft Azure 网站托管的 VBScript 函数(或合适的解决方法)中调用或至少将参数传递给 C# 函数,即:

Function VBScriptFnc(param_1, param_2, param_3)

  Dim flag;

  flag = 1

    'call the C# function or somehow pass parameters into C# function'
    csharpFunction(param_1, param_2, param_3)


  VBScriptFnc = flag

End Function

【问题讨论】:

  • 我认为你需要将C#代码编译成程序集,然后通过.dll调用方法,类似于:codeproject.com/Articles/79314/…
  • ..是的,但当您处于基本 Azure 托管级别时,这并不是那么简单(注册 DLL)。有没有更简单的选择?我总是可以将值发布到 C# 脚本中,但这似乎很糟糕。
  • 不确定您所说的“C# 脚本”是什么意思。 C# 是一种托管语言,必须编译和构建才能使用它。我一定是错过了什么......
  • 我明白了。情况如下。有一个 VBScript 网站和一个 C# 网站(都属于同一个项目)。两个应用程序的文件位于同一个根目录中。我想从 .asp 文件中指定的 VBScript 函数调用其中一个 .aspx 文件中指定的 C# 函数。
  • 顺便说一句,将 VBS 中的参数值发布到 C# 脚本中并不是一个好主意。 Azure 还将 POST / GET 值的大小限制为大约 1600 个字符。

标签: c# vbscript


【解决方案1】:

VBScript 有 5 个进入 .NET 世界的窗口:

  1. 通过对某种 .NET 处理程序(例如 .aspx、HTTP 处理程序、MVC 或 WebAPI 控制器)执行 HTTP POST/GET。
  2. 通过将数据写入文件或数据库以供 .NET 进程获取。
  3. exposing a .NET assembly (class library) as a COM object 并在 Windows 注册表中添加适当的条目(手动或使用命令实用程序),以便可以直接从 VBScript 调用它。见this article
  4. 使用 .NET 制作可直接从 VBScript 运行的可执行文件。
  5. 使用PowerShell to call into a .NET assembly 和使用VBScript to call PowerShell

网站上最直接的选择是使用 GET 或 POST,因为您将避开 ACL 和 COM 注册的雷区,但如果您必须走另一条路,我会说 PowerShell 是您最好的选择,其次是 COM 互操作作为第三选择。

【讨论】:

    【解决方案2】:

    您需要通过将 COMVisibleAttribute 设置为 true 来将您的程序集标记为 COM 可见(如果您只想公开一种类型,可以在程序集级别或在类级别)。

    接下来你注册它:

    regasm /codebase MyAssembly.dll
    

    最后从 VBScript 调用它:

    dim myObj
    Set myObj = CreateObject("MyNamespace.MyObject")
    

    此答案最初由 Darin Dimitrov Here 发布。

    【讨论】: