簡體   English   中英

從ASMX升級的Web服務到WCF的向后和向前兼容性

[英]Backwards and forwards compatibility from an upgraded web service from ASMX to WCF

最近,我已將ASMX Web服務升級到WCF,該服務公開了兩個操作,以與不同的使用者一起使用。 通過此升級,WSDL SOAP Action從<namespace>/<operation>更改為<namespace>/<service>/<operation> 問題是,我仍然需要讓以前的使用者使用我的服務,而他們只有我以前的WSDL定義。 當他們發送請求時,他們會收到HTTP 500錯誤。

我嘗試過的

  1. 強制我的OperationContract方法響應Action="*" ,在我對其他操作執行相同操作之前,此方法工作正常。 我了解到我不能有多個OperationContract方法來響應任何肥皂動作。
  2. 使用某種處理程序來捕獲ProtocolException例如IHttpModuleIErrorHandler並將請求重定向到所需的操作。 我已經成功注冊了IHttpModule類,但無法從任何EventHandler請求中獲取任何有效信息。 IErrorHandler甚至不起作用。

有什么辦法可以做到這一點?

我的服務等級:

namespace sappi
{
    [ServiceContract(Namespace = "sappi")]
    [XmlSerializerFormat]
    public interface IService
    {
        //[OperationContract]
        [OperationContract(Action = "*", ReplyAction = "*")]
        int put(Service.PutRequest putRequest);

        [OperationContract]
        int confirm(Service.ConfirmRequest confirmRequest);
    }

我的IHttpModule類:

namespace sappi
{
    public class Handler : IHttpModule
    {

        public void Init(HttpApplication application)
        {
            application.BeginRequest += new EventHandler(beginRequest);
            application.EndRequest += new EventHandler(endRequest);
        }

        private void beginRequest(Object source, EventArgs e)
        {
            //Log stuff...
        }

        private void endRequest(Object source, EventArgs e)
        {
            //Log stuff...
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }

先感謝您。

從ASMX升級的Web服務到WCF的向后和向前兼容性

盡管您可以將ASMX和SOAP服務都融合到一個系統中,但是這非常棘手,因為它們都將爭奪HTTP所有權。

相反,您可能最好維護原始的ASMX服務並創建一個新的 SOAP服務。

這允許兩個端點:

  1. 您原始的ASMX HTTP端點
  2. 任何協議中的新SOAP端點。 可能是HTTP:8080; TCP; 或管道(盡管后者可能不適用於Internet)

通用業務邏輯

接下來,您需要重構原始服務,以便所有業務邏輯都在一個新的與服務無關的公共庫中,您的ASMX和SOAP服務都可以使用該庫。

完成后,兩種服務中都應有最少的代碼,同時允許通過ASMX端點向后兼容以及將來在SOAP端點中進行擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM