探討.Net整合其他平臺(tái)(2)_.Net教程
推薦:解析ASP.NET 2.0創(chuàng)建母版頁引來的麻煩一、問題提出 由于總體排版和設(shè)計(jì)的需要,我們往往創(chuàng)建母版頁來實(shí)現(xiàn)整個(gè)網(wǎng)站的統(tǒng)一性,最近我由于統(tǒng)一性的需要,把原來整個(gè)項(xiàng)目單獨(dú)的頁面全部套用了母版頁。但是出現(xiàn)了一個(gè)錯(cuò)誤在這里記錄一下,方便大家參考。 二、抽象模型 由于整個(gè)頁面內(nèi)容過多,所以我把
為了精確地評(píng)估這個(gè)錯(cuò)誤,代理調(diào)用被一個(gè)名為Proxy Trace的公用程序使用,以便代理生成SOAP包裝。這可以通過把下列代碼添加進(jìn)ASP.Net頁面來實(shí)現(xiàn):
msNews.Proxy = new System.Net.WebProxy( http://localhost:8080);
在察看了由.Net代理生成的SOAP包裝之后,我有點(diǎn)奇怪為什么會(huì)返回這個(gè)錯(cuò)誤,因?yàn)閷?shí)際上一個(gè)相對(duì)的SOAP包裝被生成并被發(fā)送到Web服務(wù)。即使在嘗試了好幾個(gè)轉(zhuǎn)化成代理代碼之后這個(gè)錯(cuò)誤依然持續(xù)。代碼段列表2顯示了從PHP Web服務(wù)返回的完整的SOAP錯(cuò)誤包裝。
在使用VS.Net中創(chuàng)建的代理對(duì)象的好幾個(gè)把ASP.Net頁面與PHP Web服務(wù)連結(jié)的不成功的嘗試之后,我決定從頭開始創(chuàng)建SOAP包裝以便執(zhí)行更有效的程序調(diào)試。{起先,它看起來好像由.Net代理生成的模式域名空間可能是問題的關(guān)鍵,因?yàn)?Net使用2001模式規(guī)范而PHP服務(wù)使用的是1999版本的規(guī)范。
然而,我把自定義的SOAP包裝改為用1999版本代替2001版本,錯(cuò)誤依然存在。在嘗試了好幾個(gè)其他的小的改變之后,我決定把SOAP包裝使用的域名空間前綴和正文元素從soap (由.Net代理生成)改為SOAP - ENV,因?yàn)槲铱匆娫赟OAP錯(cuò)誤信息中返回了SOAP - ENV前綴。(見代碼2)這表面上看上去微不足道的改變竟解決了問題!當(dāng)處理任何請(qǐng)求的時(shí)候,PHP服務(wù)顯然需要SOAP - ENV前綴,而拒絕不包含SOAP - ENV前綴的要求。
創(chuàng)建一個(gè)自定義代理
既然已經(jīng)了解了為什么Web服務(wù)返回一個(gè)SOAP錯(cuò)誤,我們就可以創(chuàng)建一個(gè)自定義代理來生成網(wǎng)服務(wù)期待的SOAP包裝。雖然創(chuàng)建一個(gè)自定義SOAP包裝肯定比使用一個(gè)由VS.net或者WSDL.exe公用程序生成的SOAP包裝要花更多的時(shí)間,但是這樣做可以完全控制包裝的內(nèi)容。為了開始創(chuàng)建自定義代理,我創(chuàng)建一個(gè)名為msnewsserviceproxy的包含兩個(gè)字段的新類:
| 以下為引用的內(nèi)容:
public class MSNewsServiceProxy { string _soapAction; } |
uri字段保存了Web服務(wù)的位置,而_soapAction字段保存了將要使用SOAP包裝發(fā)送的SOAPAction數(shù)據(jù)頭的名稱。在MSNewsServiceProxy類之內(nèi),添加CreateSoapEnvelope (),SendSoapEnvelope ()和FilterResult ()這三個(gè)方法。這些方法生成SOAP包裝請(qǐng)求,把它發(fā)送到Web服務(wù),然后過濾返回的SOAP包裝。讓我們逐一的看看每個(gè)方法。注意代碼在SOAP包裝的根元素上添加一個(gè)SOAP - ENV域名空間前綴。Web服務(wù)顯然需要這個(gè)特定的前綴,而拒絕任何不包含這個(gè)前綴的信息。因?yàn)閂S.net生成的代理發(fā)送一個(gè)soap域名空間前綴(而不是SOAP - ENV),所以它的消息被拒絕。Web服務(wù)不應(yīng)該需要一個(gè)特定的域名空間前綴而為此拒絕不帶此前綴的消息,但是域名空間問題也是你必須注意要想使工作更好的完成,要執(zhí)行一些看上去不{0>可思議的事情。
在SOAP包裝被創(chuàng)建之后,SendSoapEnvelope ()方法(見代碼段4)使用了幾個(gè)System.Net和System.IO域名空間中的類來把這個(gè)包裝發(fā)送到Web服務(wù)中。代碼首先通過把_uri變量傳送到對(duì)象構(gòu)造器來創(chuàng)建一個(gè)HttpWebRequest對(duì)象。其次,與這個(gè)請(qǐng)求相關(guān)聯(lián)的相應(yīng)的Method,ContentType和Header都將被發(fā)送。
分享:解讀ASP.NET 2.0跨網(wǎng)頁提交的三種方法當(dāng)在一個(gè)ASP.NET Web頁面中進(jìn)行操作時(shí),在默認(rèn)情況下向當(dāng)前頁進(jìn)行提交。這種行為在ASP.NET出現(xiàn)之前并沒有什么關(guān)系,但在ASP.NET中,當(dāng)我們想向另外一個(gè)Web頁提交一個(gè)Web Form時(shí)該如何做呢?在ASP.NET1.0中這個(gè)問題變得很難解決,但在ASP.NET 2.0中為開發(fā)人員
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過程實(shí)現(xiàn)分頁示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- ASP.NET中的狀態(tài)管理
- 基于.NET平臺(tái)的分層架構(gòu)實(shí)戰(zhàn)(二)需求分析與數(shù)據(jù)庫設(shè)計(jì)
- 解讀如何在.NET中訪問MySQL數(shù)據(jù)庫
- 剖析ASP.NET AJAX的面向?qū)ο笏枷?/a>
- 淺析asp.net 和 access 聯(lián)合開發(fā)的分頁類
- 淺析asp.net 里 include UTF8 垃圾問題
- 如何在.NET環(huán)境下為網(wǎng)站增加IP過濾功能
- 從XML文件中讀取數(shù)據(jù)綁定到DropDownList
- 關(guān)于Gridview的多種使用方法總結(jié)
- Geometry 對(duì)象淺析
- 相關(guān)鏈接:
- 教程說明:
.Net教程-探討.Net整合其他平臺(tái)(2)
。