BizTalk开发系列(三十一)配置和使用HTTP适配器
更多內容請查看:BizTalk動手實驗系列目錄
? ? ? ? ? ? ? ? ? ? ??BizTalk 開發系列
???? BizTalk的主機分別進程內主機和獨立主機。但由于一直使用的是進程內主機,對于獨立主機的認識比較模糊,前不久在做一個BizTalk的項目的時候,個別系統使用HTTP的方式發布Txt之類的文本的。剛好HTTP適配器與其他的適配器有一點不同就是它的接收適配器是宿主在獨立主機(IIS)上。在使用的時候需要進行額外的配置。現在我們就來看一下運行于獨立主機上的HTTP接收適配器的使用,以及運行于進程內主機的發送適配器的使用。
?
為 HTTP 接收位置配置 IIS
?????? BizTalk主機分為進程內主機和進程外主機,進程內主機是指宿主在BizTalk運行時進程的主機,獨立主機是指是作為外部進程(如 ISAPI 擴展和 ASP.NET)適配器的宿主。因此在配置HTTP接收位置之前需要先配置IIS的BizTalk接收適配器擴展。
1.首先打開IIS管理器,在Web服務擴展中添加一個新的Web服務擴展。
2.在新的Web擴展中輸入擴展的名稱和位置,BizTalk擴展的位置一般在:C:\Program Files\Microsoft BizTalk Server 2006\HttpReceive\BTSHTTPReceive.dll 。最后選擇設置擴展狀態為允許。
3.設置完成之后,可以在IIS的Web服務擴展中查看到新添加的擴展。
?
?
配置接收位置
?? 之前講到了HTTP適配器是運行于獨立主機的,因此配置接收位置的時候跟其他適配器有一點不同,也就是除了在BizTalk應用程序里配置之外還需要在獨立主機(IIS)上進行配置。
?? 1. 在IIS上創建接收位置的位置比較簡單,只需要在IIS上創建一個虛擬目錄,將目錄的地址指向BizTalk HTTP擴展DLL的目錄。不過有兩點需要注意,一是為發安全起見將虛擬目錄的運行模式選擇讀取和執行,另外如果需要使用隔離級別需要創建一個獨立的運行池,運行池的帳戶要存在于BizTalk Isolated Hosts 和 IIS_WPG組中。并且需要給虛擬目錄指定運行池。
為運行池指定用戶
為虛擬目錄指定運行池
???? 至此您可能會試著去訪問此接收位置,由于還未在BizTalk Application中配置接收位置,因此訪問時您會收到HTTP 500的錯誤。不過BizTalk在事件日志中給出了友好的提示,如下。如果在配置或運行過程中出現錯誤也可以參考這些信息解決。
The BizTalk HTTP receive adapter failed to initialize itself. Possible reasons:
1) Receive location URL is not created/configured correctly.
2) Receive location is not enabled.
3) HTTP receive adapter is not running under a user that has access to management and message databases.
4) Isolated host instance is not created for HTTP Receive adapter.
2. 在BizTalk的Application中配置HTTP接收位置。如下圖所示,只需要配置虛擬目錄地址即可。
測試
??? 在測試之前我們需要創建一個發送端口來接收來自HTTP接收端口發布的消息。HTTP接收適配器支持Get和Post方法的請求。Get方式的測試我們可以直接在URL后面加上問號再加上您要的請求的數據即可。
??
?? Post方法我們可以自己寫代碼,也可以借用第三方的工具。這里使用的是Fiddler。一個很強大的免費的HTTP? Debuger工具。
?
?
配置發送端口
?? 由于HTTP的發送適配器是運行于進程內主機的因此配置比接收適配器要簡單點,只需要配置目標HTTP路徑即可(如果安全上的問題)
測試
??? 基于之前創建好的接收位置,我們在HTTP的發送端口端口訂閱從HTTP接收適配器發布過來的消息。同時新建一個Aspx的頁面。將接收到的請求數據寫到日志(測試時使用小量數據)。
System.IO.StreamReader?qr?=?new?System.IO.StreamReader(Request.InputStream,?System.Text.Encoding.UTF8);????????string?uriString?=?qr.ReadToEnd();?
????????if?(!string.IsNullOrEmpty(uriString))
????????{
????????????System.Diagnostics.EventLog.WriteEntry("HTTPDemo",?"Content:\r\n"?+?uriString);?
????????}?
?
發布HTTP請求之后我們可以在日志中查看到相應的記錄。
?
?
使用HTTP適配器接收Txt之類的文本.?
?? 之所以把接收文本提出來是因為HTTP的接收適配器是宿主在IIS上的,需要請求方主動的請求該路徑才可以。但有些系統可能它是通過HTTP的方式將文本發布出來的。比如http://www.cbcye.com/demo.txt 這樣路徑。所以不能使用HTTP接收適配器去主動請求Txt.那么這個任務就落在了發送適配器上面,但是發送適配器只支持POST方法,Txt文本是無法通過POST方法得到的。
所以需要創建一個接收代理(Aspx頁面),代理的作用是接收發送適配器上的請求,然后通過以下的代碼向目標路徑獲取文本數據,并將數據返回,被發送適配器的接收方法獲得。需要注意的是需要將前臺頁面的代碼去除。這樣才能將接收到的Txt信息原樣的返回。
System.IO.StreamReader?qr?=?new?System.IO.StreamReader(Request.InputStream,?System.Text.Encoding.UTF8);string?uriString?=?qr.ReadToEnd();
if?(!string.IsNullOrEmpty(uriString))
{
????System.Net.HttpWebRequest?req?=?(System.Net.HttpWebRequest)System.Net.WebRequest.Create(uriString);
????req.UserAgent?=?"Mozilla/5.0?(Windows;?U;?Windows?NT?5.2;?zh-CN;?rv:1.9.0.3)?Gecko/2008092417?Firefox/3.0.3?(.NET?CLR?3.5.21022)";
????System.Net.HttpWebResponse?res?=?(System.Net.HttpWebResponse)req.GetResponse();
????System.IO.StreamReader?sr?=?new?System.IO.StreamReader(res.GetResponseStream(),?System.Text.Encoding.UTF8);
????Response.Write(sr.ReadToEnd());
}
轉載于:https://www.cnblogs.com/cbcye/archive/2008/12/06/1349142.html
總結
以上是生活随笔為你收集整理的BizTalk开发系列(三十一)配置和使用HTTP适配器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: __name__属性
- 下一篇: ASP.NET的Page.IsPostB