[英]Supplant a BizTalk WCF service
我有一個基於BizTalk的WCF服務,我不確定它是如何部署或生成的,但據我所知,它是使用BizTalk向導發布WCF服務而制成的。 問題是BizTalk服務器安裝已刪除,現在該服務仍在此處,但是它不起作用,當我調用URL時,該服務會響應異常:BizTalk接收位置可能已禁用。 我需要生成WCF服務以替換該服務。 我有一個示例請求和響應以及帶有該服務的文件夾,其中包含很多內容,XML,定義等,但是沒有DLL。 SVC標記引用了BizTalk邏輯。
<%@ ServiceHost Language="c#" Factory="Microsoft.BizTalk.Adapter.Wcf.Runtime.WSHttpWebServiceHostFactory, Microsoft.BizTalk.Adapter.Wcf.Runtime, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
所以這是我的問題,是否有人知道如何根據請求或響應來生成服務以取代服務。
如果您只有請求和響應xml,那將有些棘手。 即使您設法重新創建服務,也不能保證現有的服務使用者將能夠繼續調用該服務而不進行任何更改。 但是,如果您想嘗試一下,此粗略指南將對您有所幫助:
從soap請求和響應中提取操作簽名
這應該很簡單。 只需查看請求xml中定義SOAP正文的部分即可。 舉個例子:
<soap:Body xmlns:m="http://www.bookshop.com/prices">
<m:GetBookPrice>
<param1 xsi:type="xs:string">Metro 2033</param1>
</m:GetBookPrice>
</soap:Body>
這表明操作名稱稱為GetBookPrice,並且它使用字符串作為參數。 現在看一下皂體的響應,例如:
<soap:Body xmlns:m="http://www.bookshop.com/prices">
<m:GetBookPriceResponse>
<return xsi:type="xs:decimal">5.99</return>
</m:GetBookPriceResponse>
</soap:Body>
這告訴我們操作的返回類型是十進制:
public decimal GetBookPrice(string bookName);
因此,現在您可以在原始WCF服務中重新創建服務操作。
服務定義可能包含復雜類型而不是原語,在這種情況下,您需要從請求/響應xml推斷類型。 如果類型太大,可以嘗試通過以下方式自動推斷它們:
總之,這不是我羡慕的任務-即使您設法忠實地重建服務和類型定義,您仍然可能會發現現有客戶端無法基於錯過了請求中未提供的一些可選數據而調用該服務/ response文件。
如果使用Visual Studio在空白項目中為服務創建客戶端(參考>“添加服務參考”),則將獲得您需要實現的接口(以及所有參數的POCO)。 然后創建一個新的WCF項目,並將該接口和這些類用作合同。
這樣,您將無需使用手動解釋即可使用現有架構。
在您的服務文件夾中,位於服務物理文件夾的\\ App_Data \\ Temp文件夾下,找到WcfServiceDescription.xml文件(您可以檢查IIS虛擬目錄,並在其中找到物理路徑)。
使用此文件再次發布服務。 根據其中的定義,請確保在再次發布服務之前,將所需的程序集部署到GAC(例如,架構或業務流程程序集)。
然后,您可以使用BtsWcfServicePublishing.exe工具,該工具可以從命令提示符下從http://www.microsoft.com/zh-cn/download/details.aspx?id=21973下載。 在此exe上傳遞WcfServiceDescription.xml文件及其完整路徑
最后,我使用了ashx處理程序來處理請求(與其他響應組合在一起非常有幫助)xml-> generate xsd->解析和讀取請求。 唯一的問題是.ashx終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.