【问题标题】:Calling webservice from vbscript > option?从 vbscript > 选项调用 web 服务?
【发布时间】:2012-02-27 23:26:20
【问题描述】:

对于一个项目,我们需要从 vbscript 调用一些 web 服务。这是可行的,但它需要手动构建整个 XML 片段。我被 .NET 宠坏了,所以我想做得更好。

可以选择构建 COM 组件并从 vbscript 调用它,但不幸的是,这还需要在客户端上注册 COM 组件,而我们没有这个选项。

我想到的另一件事是构建一个控制台应用程序来处理 Web 服务调用和异常等。这里的问题是我需要向 vbcode 返回一个字符串,其中一个控制台应用程序只能返回一个退出代码,仅此而已(据我所知)。由于这是一个共享场景,我也不能写入文本文件,因为这会导致多用户场景出现问题。

所以我想知道是否有任何我错过并应该考虑的选项?或者在另一种情况下:你们会选择什么选项,为什么?

编辑:值得一提;网络服务是我的,它运行的服务器也是。它将通过 SSL 和授权进行保护,以确保除了我们的客户之外没有人可以使用它。我将它设置为 WCF 服务,但要构建它,以便我仍然可以更改它(服务类型或绑定类型)。

【问题讨论】:

标签: c# web-services vbscript


【解决方案1】:

答案实际上取决于您的具体情况。例如,如果您可以控制 Web 服务,则可以公开一个 netTcpBinding 端点,然后直接从 vbscript 使用它。

这里有一个nice article,它展示了如何逐步实现这一目标。基本上您的客户端代码可能如下所示:

Dim addr
addr = "service:mexAddress=""net.tcp://localhost:7891/Test/WcfService1/Service1/Mex"","
addr = addr + "address=""net.tcp://localhost:7891/Test/WcfService1/Service1/"","
addr = addr + "contract=""IWcfService1"", contractNamespace=""http://tempuri.org/"","
addr = addr + "binding=""NetTcpBinding_IWcfService1"", bindingNamespace=""http://tempuri.org/"""

Dim service1
Set service1 = GetObject(addr)
wscript.echo service1.GetData(123)

WCF 服务可以托管在 IIS 7.0+ 的 WAS 中,允许使用 netTcpBinding,也可以作为 Windows 服务自行托管。

如果您可以控制服务,另一种可能性是将其公开为更易于使用的 REST。您可以选择 JSON 和 XML,它们可能仍需要在客户端进行解析,但至少它会让事情变得更简洁。

如果您与 SOAP 相关,那么推荐的方法是使用 MSXML2.ServerXMLHTTP.6.0 中所示的 this answer 并手动构建信封。

Windows XP 附带的MSSOAP.soapClient 控件现在已过时,即使它可以通过 SOAP 服务完全实现您所寻找的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多