程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> COM(VB/VBA/Script)利用服務標記調用WCF服務之二使用MEX契約

COM(VB/VBA/Script)利用服務標記調用WCF服務之二使用MEX契約

編輯:關於.NET

第一步:創建WCF服務

上一篇我們使用類型化契約的服務標記在COM中調用WCF服務,不過這個有一 定的局限性,因為需要注冊類型,所以需要.Net FrameWork,但是在很多情況下COM客戶端所在的環境沒有 .Net Framework,比如說在Excel中,需要調用一個WCF服務來計算某個單元格的值,而且這個Excel文件可 能分發到許多機器上,你總不能給每台機器都裝一個.Net Framework,同時都去給它注冊所需的類型吧。 針對這種場景,我們可以使用MEX契約的服務標記來動態得到服務契約,這樣就可以滿足我們上面的場景 的要求了。下面就讓我們開始吧!

這個和上一篇的完全一樣,具體請參見COM(VB/VBA/Script)利用服務標記調用WCF服務之一使用類型化 契約的第一步,如果您曾經按照上一篇文章做過相應的測試,你就可以直接使用已經建好的服務了。 第 二步:在Script中調用WCF服務 1 這裡大家對比前面一篇就可以看到,這裡沒有任何創建客戶端庫以及注 冊等步驟,而是直接進行調用WCF服務了。在寫調用代碼之前,首先讓我們打開服務的WSDL來看看,因為 這裡有我們需要的服務標記信息。 2 我們打開http://localhost/WCFServiceMoniker/Service1.svc? wsdl之後,如下圖所示:

3 下面就是創建我們的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 直接運行,同樣能得到上圖類似的結果。

1Sub CallWCFService_Mex()
2  Dim strMonikerString As String
3  Dim serviceMoniker As Object
4  '---------------------------------------------------------------
5  ' MEX service moniker example
6  '---------------------------------------------------------------
7  ' Create a string for the service moniker specifying the address
8  ' to retrieve the service metadata from
9  mexMonikerString = 

"service:mexAddress='http://localhost/WCFServiceMoniker/Service1.svc/mex'"
10  mexMonikerString = mexMonikerString + ", 

address='http://localhost/WCFServiceMoniker/Service1.svc'"
11  mexMonikerString = mexMonikerString + ", binding=WSHttpBinding_IService1, 

bindingNamespace='http://tempuri.org/'"
12  mexMonikerString = mexMonikerString + ", contract=IService1, 

contractNamespace='http://tempuri.org/'"
13  ' Create the service moniker object
14  Set mexServiceMoniker = GetObject(mexMonikerString)
15
16  ' Call the service operations using the moniker object
17  MsgBox mexServiceMoniker.SayHello("I am LazyBee, My blog is 

http://lazybee.cnblogs.com/ ")
18
19  Set mexServiceMoniker = Nothing
20End Sub
21
22

注:在VB6中調用和上面的代碼一樣。

文章來源:http://lazybee.cnblogs.com

本文配套源碼:http://www.bianceng.net/dotnet/201212/756.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved