1.1 Soap Toolkit 最新版本是什么?2001 年 6 月 21 日發(fā)布的 SP2 2.0 版,可從http://msdn.microsoft.com/library/default.asp?url=/downloads/list/websrv.asp 站點(diǎn)獲得此版本。 1.2 如何運(yùn)行 Soap跟蹤實(shí)用工具?使用 MSSOAPT 在服務(wù)器端跟蹤:
現(xiàn)在,向 WSDL 中指定地址提出的所有請(qǐng)求/指定地址返回的所有響應(yīng)都會(huì)在跟蹤中出現(xiàn)。 使用 MSSOAPT 在客戶端跟蹤:
現(xiàn)在,來(lái)往于客戶端的任何請(qǐng)求/響應(yīng)都會(huì)在跟蹤中出現(xiàn)。 1.3 要使 SSL 運(yùn)行,必須做什么?假設(shè)服務(wù)器設(shè)置為需要 SSL,您只需將 WSDL 文件中的 URL 更改(或者,如果您正在使用低級(jí)別接口,更改 Soap Connector URL)為以 HTTPS 開頭,而不以 HTTP 開頭。不必在客戶端設(shè)置 UseSSL 屬性。如果這樣做不起作用,最常見的原因就是服務(wù)器證書已經(jīng)過(guò)期,或是服務(wù)器需要客戶證書。注意,我們經(jīng)常聽說(shuō)“使用 HTTP URL 運(yùn)行成功,但使用 HTTPS URL 運(yùn)行失敗”。如果虛擬根目錄設(shè)置為要求 SSL,那么使用 HTTP 就不會(huì)運(yùn)行,因此,本語(yǔ)句意味著服務(wù)器沒有設(shè)置為要求 SSL。 其他一些常見問題:
在 MSDN 文章中,可以找到對(duì)這些問題及其他問題的準(zhǔn)確解釋,用 Microsoft SOAP Toolkit 2.0 構(gòu)建安全的 Web 服務(wù)。 1.4 為什么沒有安裝 SMO Generator?查找到 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Microsoft Visual Basic\ProductDir" 注冊(cè)表項(xiàng)時(shí),安裝 SMO Generator 的選項(xiàng)應(yīng)該是可見的。請(qǐng)使用 regedit 查看 該項(xiàng)是否存在。 1.6 如何使 Soap Toolkit 與 Apache 進(jìn)行交互?在 2.1 版之前,Apache 要求所有 Soap 參數(shù)的 xsi:type 屬性。而且,Soap Toolkit 通常不發(fā)送 Soap 消息中的 xsi:type。如果部署說(shuō)明符中定義了類型,Apache 2.1 版就不再需要 xsi.type 屬性。但是,Apache 服務(wù)還不使用 WSDL,因此,必須為 Soap Toolkit 客戶端創(chuàng)建一個(gè) WSDL 文件與 Apache 服務(wù)器進(jìn)行對(duì)話。已經(jīng)使用 Apache 2.2 成功測(cè)試了 RTM Soap Toolkit。 另一個(gè)有時(shí)起作用的竅門是在生成 WSDL 文件后對(duì)其進(jìn)行編輯,將 Apache 出現(xiàn)問題的類型更改為 "xsd:anyType"。這會(huì)使該工具包將參數(shù)作為變量,因此它會(huì)包含 Apache 正在查找的類型信息。 1.9 WSDL 是什么?WSDL 是描述 Soap 消息和 Web 服務(wù)的標(biāo)準(zhǔn)的、結(jié)構(gòu)化方法。Soap Toolkit 依賴于 WSDL 創(chuàng)建并解釋 Soap 消息,因此,對(duì)于任何 Soap Toolkit 2.0 客戶端或服務(wù)器,均要求 WSDL 文件。如果希望 Soap Toolkit 2.0 客戶端與不提供 WSDL 的 Soap 服務(wù)器通訊,必須創(chuàng)建一個(gè) WSDL 文件,該文件描述 Soap 服務(wù)期望的消息。完成此任務(wù)最簡(jiǎn)單的方法是:在 Microsoft Visual Basic 中創(chuàng)建一個(gè)與服務(wù)器所希望相匹配的虛擬接口,并使用 VB dll 上的 WSDLGen 創(chuàng)建 WSDL 文件。也可以手工創(chuàng)建 WSDL 文件。如果您希望支持非 WSDL 的 Soap 客戶端與 Soap Toolkit 2.0 服務(wù)對(duì)話,僅需要使用 WSDL 文件來(lái)描述 Soap 消息的外觀,并將此翻譯成客戶端用來(lái)創(chuàng)建 Soap 消息的任何機(jī)制。 1.10 WSDL 標(biāo)準(zhǔn)在哪里?W3C 已經(jīng)確認(rèn)了 WSDL 1.1 規(guī)范的提交?,F(xiàn)在,可以在 http://www./TR/wsdl 找到該規(guī)范。 1.11 在 ASP 中運(yùn)行客戶端時(shí),為什么不能讀取 WSDL 文件?使用 MSXML 的 http 接口,將 WSDL 文件加載到 WSDL 讀取器中的 DOM。運(yùn)行 ASP 頁(yè)中的 MSXML HTTP 堆棧要求使用 ServerHTTPRequest 選項(xiàng)。為此,請(qǐng)遵循如下操作:
另一個(gè)選擇是使用本地 filepath 來(lái)指定 WSDL: mssoapinit ("C:\wsldfiles\MyProject.wsdl") 另一個(gè)選擇是使用本地 filepath 來(lái)指定 WSDL: mssoapinit ("C:\wsldfiles\MyProject.wsdl") 1.11 WSML 是什么?WSML 被確切地描述為 Soap Toolkit 配置文件。它包含將 WSDL 文件描述的 SOAP 消息映射到 COM 接口所要求的信息。這包含諸如 ProgID 和 DispID 這樣的標(biāo)準(zhǔn) COM'ism。WSML 決不會(huì)是一個(gè)標(biāo)準(zhǔn),因?yàn)樗粚?duì) Soap Toolkit 有意義。 1.12 為什么要使用 SMO,而不使用高級(jí)別接口?雖然兩者之間存在一些重疊,但高級(jí)別接口在傳統(tǒng) RPC 類型應(yīng)用程序中處于最佳狀態(tài)。同時(shí),SMO 在執(zhí)行面向消息的應(yīng)用程序時(shí)狀態(tài)較好。如果希望使用 Soap 來(lái)交換 XML 文檔,SMO 是最佳選擇。如果希望使用 Soap 執(zhí)行遠(yuǎn)程主機(jī)上的操作,高級(jí)別接口可能是更好的選擇。SMO 提供了一個(gè)接口,創(chuàng)建復(fù)雜 XML 文檔時(shí)比高級(jí)別接口更易于使用。 1.13 何時(shí)使用 ISAPI 偵聽器而不使用 ASP?我的回答是幾乎總要使用。ISAPI 使用起來(lái)比 ASP 頁(yè)更加快捷方便,因此,除非所需工作 ISAPI 無(wú)法完成或正在使用 SMO,否則我會(huì)推薦使用 ISAPI。 1.14 為什么 ISAPI 在虛擬根目錄上不運(yùn)行?安裝 ISAPI 時(shí),它會(huì)自行注冊(cè)以處理 ".WSDL" 文件。Soap Toolkit 2.0 的安裝通過(guò)創(chuàng)建 “App Mapping” 將 ".WSDL" 擴(kuò)展與機(jī)器(服務(wù)器)級(jí)別的 soapisap.dll 相關(guān)聯(lián)來(lái)完成此任務(wù)。安裝 SoapToolkit 2.0 之前,如果 “App Mapping” 在比機(jī)器級(jí)別低的節(jié)點(diǎn)發(fā)生變化(例如,在 “Web Site” 或 “Virtual Directory” 級(jí)),那么,新添加的 ".WSDL" 映射不會(huì)繼承機(jī)器級(jí)別設(shè)置。在這種情況下,可以用 IIS MMC Admin 工具在較低級(jí)別節(jié)點(diǎn)手工輸入 “App Mapping”。 例如,下面是使用 IIS MMC Admin 工具在 IIS 5.0 上手工添加 “Default Web Site” 的 “App Mapping” 的步驟(在進(jìn)行這些步驟前要確保您有本地 admin 權(quán)限):
注 由于 IIS Admin 工具的 UI 中的錯(cuò)誤,不能添加帶有空格的路徑名。 要解決這個(gè)問題,輸入 soapisap.dll 的短文件路徑名(示例: ?C:\PROGRA~1\COMMON~1\MSSOAP\BINARIES\SOAPISAP.DLL}。 在 "Extension" 文本框中輸入 .wsdl。 如果您正在使用 Microsoft Windows 2000,為 "Verbs" 選擇 Limit to 并添加: GET、POST、HEAD。 如果您正在使用 Windows NT_ 4 ,保持 Exclude 文本框?yàn)榭?/b>。 最后,應(yīng)選中 “Script Engine”,且不應(yīng)選中 "Check that files exist"。 現(xiàn)在,單擊 OK 以輸入新項(xiàng)。 注 雖然以上步驟會(huì)在 “Default Web Site” 級(jí)別添加 “App Mapping”,但在諸如 “Virtual Directory” 這樣的較低級(jí)別,可遵循同樣的步驟。 1.15 Soap Toolkit 中支持?jǐn)?shù)組嗎?Soap Toolkit 中支持簡(jiǎn)單類型的一維數(shù)組、復(fù)雜類型的數(shù)組和多維數(shù)組。后面的服務(wù)軟件包包括對(duì)數(shù)組處理的幾項(xiàng)改進(jìn)和修復(fù)。 1.19 Soap Toolkit fault Detail 元素包含什么?細(xì)節(jié)部分是具有命名空間資格的,使用下列命名空間: http://schemas.microsoft.com/soap-toolkit/faultdetail/error/ 所有 Soap Toolkit 特定信息進(jìn)入下列主干: <soap:fault....> <detail> <mserror:errorInfo xmlns:mserror="http://schemas.microsoft.com/soap- toolkit/faultdetail/error/"> <mserror:returnCode></mserror:returnCode> <mserror:serverErrorInfo> <mserror:description></mserror:description> <mserror:source></mserror:source> <mserror:helpFile></mserror:helpFile> <mserror:helpContext></mserror:helpContext> </mserror:serverErrorInfo> <mserror:callStack> <mserror:callElement> <mserror:component></mserror:component> <mserror:description></mserror:description> <mserror:returnCode></mserror:returnCode> </mserror:callElement> </mserror:callStack> </mserror:errorInfo> </detail> 因此,假設(shè)已經(jīng)匯編了豐富的錯(cuò)誤信息,我們就會(huì)以 mserror:errorInfo 元素開始創(chuàng)建擴(kuò)展的 errorinfo 節(jié)。在第一個(gè)子級(jí)內(nèi),returnCode 進(jìn)入客戶端 Error 對(duì)象的 HR。 如果提供服務(wù)器端 errorinfo 對(duì)象本身的內(nèi)容產(chǎn)生失?。ㄖT如 servercomponent 被調(diào)用),那么(并且只是那么,因此并不總是需要下面步驟),我們創(chuàng)建 mserror:serverErrorInfo 節(jié)。此節(jié)中的所有字段都是可選的—雖然,當(dāng) helpfile 持續(xù)時(shí),您總是另外得到 helpContext—而且,只有當(dāng)服務(wù)器在字段中有信息時(shí),字段才持續(xù)。如果這些字段存在,就進(jìn)入客戶端的 Error 對(duì)象。 1.20 為什么得到 “l(fā)ibrary not registerd” 錯(cuò)誤?在試圖執(zhí)行下列操作時(shí),出現(xiàn) “l(fā)ibrary not registerd” 錯(cuò)誤:Server.CreateObject("MSSOAP.SoapServer")。 產(chǎn)生這一錯(cuò)誤的原因可以追溯到 typelib 注冊(cè)表項(xiàng),它沒有給出 "Everyone" 分組讀訪問權(quán)限。這很可能是優(yōu)先安裝 Crystal Reports 8.0 的結(jié)果(請(qǐng)參閱 http://support.microsoft.com/support/kb/articles/Q266/6/21.ASP)。 2.1 如何處理 XSD 命名空間?您可能會(huì)遇到 SOAP 應(yīng)用程序中三個(gè)版本的 XSD 命名空間:1999、2000/10 和 2001。只要消息中的命名空間與 WSDL 文件中的命名空間相匹配,Soap Toolkit 2.0 就會(huì)接受具有任何一種版本命名空間的消息。WSDLGen 已經(jīng)修改,因此您能夠在三種命名空間中指定希望使用哪一種。如果不需要使用 1999 或 2000 版本與較低版本 Soap 實(shí)現(xiàn)兼容,建議使用默認(rèn)的 2001 版本。注意,幾種數(shù)據(jù)類型名稱在 2001 版規(guī)范中已經(jīng)更改。詳細(xì)信息,請(qǐng)參閱文檔。 2.2 如何在客戶端安裝 Soap這確實(shí)是 FAQ。正確的答案是使用 .MSM 文件,可以從下載 toolkit 的頁(yè)上下載該文件。如果您仔細(xì)將所有 DLL 置于正確的目錄并正確注冊(cè),或許就能進(jìn)行您自己的安裝;然而,將 .MSM 合并入您的安裝程序是實(shí)現(xiàn)這一目的最安全的方法,也是唯一受支持的方法。 2.3 為什么客戶端抱怨找不到服務(wù)器組件?如果 SOAP 方法使用自定義類型匹配器,您可能需要使用客戶端的 WSML 文件。WSML 文件為 SoapClient 指定了自定義匹配器的 progid 以獲知它的位置。如果您的 WSML 文件指定了服務(wù)器組件的 progid(如同使用為服務(wù)器生成的 WSML 時(shí)一樣),您可能想刪除服務(wù)器組件信息,因此,SoapClient 不會(huì)試圖加載服務(wù)器組件。 2.4 Soap Toolkit 支持 COM EXE 作為服務(wù)器對(duì)象嗎?雖然在一些實(shí)例中這可能有效,但這并不是一個(gè)經(jīng)過(guò)測(cè)試或受到支持的配置。建議編寫基于 DLL 的 .EXE 包裝來(lái)處理這種情況。 2.5 為什么不能從腳本調(diào)用 WSDLReader?WSDLReader 不公開調(diào)度接口,因此它不能在腳本中使用。 2.6 為什么我的字符編碼在 NT4 上不運(yùn)行?Windows NT 4.0 不支持 CHS:gb2312 或 AR:iso8859-6 編碼。 2.7 如何使用低級(jí)別接口將 XML 寫入消息?Serializer.writeXML 無(wú)需轉(zhuǎn)義即可寫出 XML。文檔提到它使用 CDATA 節(jié),但實(shí)際不是這樣。 2.8 為什么得到訪問被拒絕錯(cuò)誤?切記,Soap Toolkit 應(yīng)用程序是 Web 應(yīng)用程序。所有 Web 服務(wù)器都有許多保護(hù)措施確保用戶不能訪問不應(yīng)訪問的內(nèi)容。這意味著訪問被拒絕經(jīng)常是服務(wù)器應(yīng)用程序的默認(rèn)狀態(tài)。請(qǐng)檢查以下幾項(xiàng)內(nèi)容:
這不是一個(gè)詳盡的列表,但應(yīng)該能夠?yàn)槟峁┮恍┏跏嫉慕ㄗh。 2.9 那些 SoapConnector HResult 的含義是什么?
2.10 將 Soap Server 移到另一臺(tái)機(jī)器時(shí),為什么客戶端不運(yùn)行?發(fā)生這個(gè)問題的一個(gè)常見原因就是可能需要更改兩個(gè)不同的 URL。SoapClient.mssoapinit 調(diào)用包含了 WSDL 文件(以及可選擇的 WSML 文件)的位置。如果移動(dòng)服務(wù)時(shí)移動(dòng)了這些文件,必須更改參數(shù)與之匹配。在 “l(fā)ocation” 屬性中的 WSDL 文件中,指定了 Soap 服務(wù)的實(shí)際 URL—這一點(diǎn)常常被遺忘。 2.11 所有客戶端均不安裝 Soap Toolkit 時(shí),如何實(shí)現(xiàn) Soap Client?有一個(gè)基于腳本的 Soap 實(shí)現(xiàn),不需要安裝 Soap Toolkit。 2.12 如何保護(hù) Soap 應(yīng)用程序?Soap 本質(zhì)上是一個(gè) Web 應(yīng)用程序,因此,所有應(yīng)用于 Web 應(yīng)用程序的安全性基本原理也適用于 Soap。這篇 FAQ 已經(jīng)涵蓋了一些最常見的疑問,但安全性是一個(gè)非常廣泛的問題,這里不能完全涵蓋。下面是一篇由我們的測(cè)試負(fù)責(zé)人撰寫的有關(guān) Soap 安全性的文章:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Dnsoap/html/Soapsecurity.asp?frame=true.我所了解的用于設(shè)置 Web 安全性的最佳資源是 Michael Howard 的專著:Designing Secure Web-Based Application for Microsoft Windows 2000,Microsoft Press;ISBN:0735609950。 ASPToday 也有幾篇不錯(cuò)的關(guān)于安全性的文章,其中有:Securing Windows 2000 IIS 5.0applications. 2.13 為什么客戶證書不運(yùn)行?關(guān)于客戶證書的一個(gè)常見問題是在一個(gè)證書中有多個(gè)名稱—友好名稱和主題名稱。主題名稱是在 Soap Client 中指定客戶證書時(shí)使用的名稱。要查找主題名稱,使用 IE 定位到 IE/Tools/Internet Options/Content,并單擊證書按鈕。要使用的名稱位于 "Issued To" 列。這個(gè)名稱常常是一個(gè) X.500 名稱。如果這樣,CN 是所要求名稱的一部分。有關(guān)詳細(xì)信息,請(qǐng)參閱 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Dnsoap/html/Soapsecurity.asp?frame=true 上的 Soap 安全性文章。 2.14 遇到 Soap Toolkit 2.0 問題時(shí),如何獲得支持?可從 http://support.microsoft.com/directory/overview.asp?sd=gn&fr=0 站點(diǎn)獲得 Microsoft 支持選項(xiàng)概覽。您可以從以下站點(diǎn)選擇電話支持或基于 Web 的支持:http://support.microsoft.com/directory/directory.asp?sd=gn。 2.15 Windows 95 支持 Soap Toolkit 嗎?Windows 95 缺少一些 Soap Toolkit 代碼使用的系統(tǒng)調(diào)用,因此,目前不能支持。 2.16 為什么低級(jí)別 API 應(yīng)用程序不運(yùn)行?低級(jí)別對(duì)象在處理邊界間(例如,中等或高等保護(hù),COM+ server 應(yīng)用程序和調(diào)試程序)使用時(shí),關(guān)于它們的一些封送處理問題會(huì)產(chǎn)生其他問題。目前,只使用低級(jí)別組件 inproc。這個(gè)問題將在服務(wù)軟件包版本中解決。 2.17 我的 IIS 服務(wù)器返回一個(gè) HTTP 狀態(tài)代碼。這是什么意思?請(qǐng)查閱:http://msdn.microsoft.com/workshop/networking/wininet/reference/constants/statuscodes.asp。 2.18 如何得到 Web Service Behaviors 問題的解答?從 soapsdk 新聞組不能得到滿意的解答。可將問題發(fā)送到:iewctrls@microsoft.com。 2.19 下一版本 Soap Toolkit 何時(shí)發(fā)布?Soap Toolkit 3.0 應(yīng)該在 2001 年秋末發(fā)布其第一個(gè)測(cè)試版。 2.20 為什么不能每秒從一個(gè) Soap Client 進(jìn)行五次以上的調(diào)用?添加的注冊(cè)表設(shè)置使您能夠關(guān)閉 ISAPI 服務(wù)器中的 Nagling 延遲。從特殊連接上的 ISAPI 接收到每個(gè)緩沖區(qū)后,Nagling 通過(guò)添加延遲防止 TCP 發(fā)送小的數(shù)據(jù)包,以免另一個(gè)緩沖區(qū)很快就到達(dá),因而兩個(gè)緩沖區(qū)能夠結(jié)合起來(lái)。這個(gè)延遲是 200 ms,因此,大多數(shù) Soap 操作都有額外的 200 ms 通過(guò) Nagling 延遲添加到它們的執(zhí)行時(shí)間。這使得一些愚蠢的基準(zhǔn)使調(diào)用服務(wù)器的單一客戶端在循環(huán)中報(bào)告比在關(guān)閉 Nagling 時(shí)更糟糕的結(jié)果。顯然,即使客戶端和服務(wù)器執(zhí)行時(shí)沒有花費(fèi)時(shí)間,單一客戶端線程也不能每秒將五個(gè)以上的事務(wù)發(fā)送到服務(wù)器。在數(shù)以千計(jì)的客戶并行訪問服務(wù)器這種更現(xiàn)實(shí)的基準(zhǔn)中,Nagling 常常通過(guò)減少發(fā)送的小數(shù)據(jù)包數(shù)量來(lái)提高性能。通常,如果基準(zhǔn)給出的結(jié)果比預(yù)料的結(jié)果更糟糕,嘗試關(guān)閉 Nagling,看看是否有用。要關(guān)閉 Nagling 延遲,將 HKEY_LOCAL_MACHINE\Software\Microsoft\MSSOAP\SOAPISAP 中的 "NoNagling" DWORD 值更改為 1。 2.21 為什么 Soap Toolkit 不能從該站點(diǎn)讀取 WSDL?看一下 WSDL 是否有導(dǎo)入語(yǔ)句。2.0 版的 toolkit 還不支持導(dǎo)入。唯一的途徑就是自己復(fù)制 WSDL 文件,并使用剪貼將導(dǎo)入信息拖入主文件。這應(yīng)在 toolkit 3.0 版本中解決。 |
|