zoukankan      html  css  js  c++  java
  • COM(VB/VBA/Script)利用服务标记调用WCF服务之二使用MEX契约

    COM(VB/VBA/Script)利用服务标记调用WCF服务

    之二使用MEX契约

    LazyBeehttp://lazybee.cnblogs.com

    上一篇我们使用类型化契约的服务标记在COM中调用WCF服务,不过这个有一定的局限性,因为需要注册类型,所以需要.Net FrameWork,但是在很多情况下COM客户端所在的环境没有.Net Framework,比如说在Excel中,需要调用一个WCF服务来计算某个单元格的值,而且这个Excel文件可能分发到许多机器上,你总不能给每台机器都装一个.Net Framework,同时都去给它注册所需的类型吧。针对这种场景,我们可以使用MEX契约的服务标记来动态得到服务契约,这样就可以满足我们上面的场景的要求了。下面就让我们开始吧!

     

    第一步:创建WCF服务

        这个和上一篇的完全一样,具体请参见COM(VB/VBA/Script)利用服务标记调用WCF服务之一使用类型化契约的第一步,如果您曾经按照上一篇文章做过相应的测试,你就可以直接使用已经建好的服务了。

     

    第二步:在Script中调用WCF服务

    1 这里大家对比前面一篇就可以看到,这里没有任何创建客户端库以及注册等步骤,而是直接进行调用WCF服务了。在写调用代码之前,首先让我们打开服务的WSDL来看看,因为这里有我们需要的服务标记信息。

    2 我们打开http://localhost/WCFServiceMoniker/Service1.svc?wsdl之后,如下图所示:

    下面就是创建我们的Script文件了,我们起名为CallWCFService_mex.vbs,内容如下:

     1'---------------------------------------------------------------
     2' MEX service moniker example
     3'---------------------------------------------------------------
     4' Create a string for the service moniker specifying the address
     5' to retrieve the service metadata from
     6mexMonikerString = "service:mexAddress='http://localhost/WCFServiceMoniker/Service1.svc/mex'"
     7mexMonikerString = mexMonikerString + ", address='http://localhost/WCFServiceMoniker/Service1.svc'"
     8mexMonikerString = mexMonikerString + ",binding=WSHttpBinding_IService1, bindingNamespace='http://tempuri.org/'"
     9mexMonikerString = mexMonikerString + ", contract=IService1, contractNamespace='http://tempuri.org/'"
    10' Create the service moniker object
    11Set mexServiceMoniker = GetObject(mexMonikerString)
    12' Call the service operations using the moniker object
    13WScript.Echo  mexServiceMoniker.SayHello("I am LazyBee, My blog is http://lazybee.cnblogs.com/ ")
    14Set mexServiceMoniker = nothing
    15


    注意:在我们服务标记字符串中,包含Mex地址、服务地址、绑定及命名空间、服务契约及命名空间四部分内容。在这里服务地址就是上图所标注的地址,当然Mex地址就是在其后面增加一个mex了,这个对大家来说应该都很好理解。绑定及服务也是上图所标注,不过注意其大小写,因为在服务标记中是区分大小写的,由于我们没有给服务契约和绑定指定命名空间,缺省就是“http://tempuri.org/”了。

    4 保存之后,直接双击运行,你就可以看到运行结果了:

     

    第三步:在VBA的宏中调用WCF服务

    1 VBA中的代码和上一篇文章COM(VB/VBA/Script)利用服务标记调用WCF服务之一使用类型化契约的一样,只是将服务标记字符串和上面一样做相应的更改就可以了,如下所示:

    2 直接运行,同样能得到上图类似的结果。

     

    Code

    注:在VB6中调用和上面的代码一样。

     

    本文的源代码下载地址为:https://files.cnblogs.com/LazyBee/WCFServiceMoniker_MEX.Zip

    (转载请注明出处:http://lazybee.cnblogs.com

  • 相关阅读:
    scala学习笔记4:函数和闭包
    架构模式: 领域事件
    架构模式:API组合
    架构模式: Saga
    架构模式: 客户端 UI 构建
    架构模式: 服务器端页面碎片化元素构建
    架构模式: 记录部署和变更日志
    架构模式: 健康检查API
    架构模式: 异常追踪
    架构模式:分布式跟踪
  • 原文地址:https://www.cnblogs.com/LazyBee/p/1251116.html
Copyright © 2011-2022 走看看