熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.Net整合其他平台的一些探討[1]

2013-11-13 12:15:38  來源: .NET編程 

  整合分布式應用程序經常是一件非常困難並且錯綜復雜的任務即使是最富有經驗的開發者也可能會覺得頭疼當應用程序在不同的操作系統以及涉及不同的程序平台時這個集成問題變得尤其復雜雖然說Web服務承諾可以減輕程序員完成集成任務的困難程度但是也可能給程序員們帶來一些意想不到的麻煩在這裡我們將把一個ASPnet應用程序和一個PHP Web服務連結起來以學習一些整合分布式應用程序的方法以及必要的應對措施包括運行什麼以及不用去做什麼

  這個Web服務在一個Apache服務器上運行並且使用PHP開發它從各種微軟新聞組檢索新聞摘要以及它們的關聯的文本即使由這個服務提供的數據可以直接使用內部的Net對象存取但是這個服務還是將使用並提供一個連接到非Net平台上的不錯的演示我們這裡要討論的實例基於Net beta

  創建一個Web服務代理

  Visual StudioNET提供了一個出色的機制用於自動地生成可用於存取遠程Web服務的代理對像因此要首先嘗試使用這些函數來導入由PHP服務提供的Web服務描述語言(Web Services Description LanguageWSDL)文件 還可以使用Net SDK的WSDLexe命令行公用程序不幸的是在使用VSnet向導導入WSDL之後並不能成功地創建一個代理所以我必須把導入原始的WSDL文件後由VSNet生成的文件轉換為WSDL

  ◆把模式域名空間從http://wwwworg//XMLSchema改成http://wwwworg//XMLSchema 然後清除所有的當WSDL導入過程中由VSNet添加的q域名空間

  ◆刪除 xmlns:tm=http://microsoftcom/wsdl/mime/textMatching/和xmlns: mime=http://schemasxmlsoaporg/wsdl/mime/ 名字空間因為這個應用程序中不需要包含這些

  ◆刪除類型元素因為原始的 WSDL文檔 並沒有包含Web服務的模式信息的指定的元素區段

  ◆改變輸入輸出元素消息屬性值為包含tns域名空間前綴的形式:

  以下為引用的內容

<portType name=nntpSoapPortType
<operation name=getheaders parameterOrder=newsgroup numitems

<input message=tns:getheaders />

<output message=tns:getheadersresponse />

</operation>

<operation name=getarticle parameterOrder=newsgroup article

<input message=tns:getarticle />

<output message=tns:getarticleresponse />

</operation>

</portType>

  在進行了下面的這些微小的改變VSNet向導能夠讀取WSDL並且自動地生成一個代理在編譯了這個代理之後它被包含在一個ASPNET頁面中然而當這個ASPNet頁面被執行 message does not have a correct SOAP root XML tag這個錯誤被當作一個SOAP錯誤從Web服務中返回

  為了精確地評估這個錯誤代理調用被一個名為Proxy Trace的公用程序使用以便代理生成SOAP包裝這可以通過把下列代碼添加進ASPNet頁面來實現

msNewsProxy = new SystemNetWebProxy( http://localhost:);

  在察看了由Net代理生成的SOAP包裝之後我有點奇怪為什麼會返回這個錯誤因為實際上一個相對的SOAP包裝被生成並被發送到Web服務即使在嘗試了好幾個轉化成代理代碼之後這個錯誤依然持續代碼段列表顯示了從PHP Web服務返回的完整的SOAP錯誤包裝

  在使用VSNet中創建的代理對象的好幾個把ASPNet頁面與PHP Web服務連結的不成功的嘗試之後我決定從頭開始創建SOAP包裝以便執行更有效的程序調試{起先它看起來好像由Net代理生成的模式域名空間可能是問題的關鍵因為Net使用模式規范而PHP服務使用的是版本的規范

  然而我把自定義的SOAP包裝改為用版本代替版本錯誤依然存在在嘗試了好幾個其他的小的改變之後我決定把SOAP包裝使用的域名空間前綴和正文元素從soap (由Net代理生成)改為SOAP ENV因為我看見在SOAP錯誤信息中返回了SOAP ENV前綴(見代碼)這表面上看上去微不足道的改變竟解決了問題!當處理任何請求的時候PHP服務顯然需要SOAP ENV前綴而拒絕不包含SOAP ENV前綴的要求

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/15523.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.