[英]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錯誤。
我嘗試過的
Action="*"
,在我對其他操作執行相同操作之前,此方法工作正常。 我了解到我不能有多個OperationContract方法來響應任何肥皂動作。 ProtocolException
例如IHttpModule
或IErrorHandler
並將請求重定向到所需的操作。 我已經成功注冊了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服務。
這允許兩個端點:
接下來,您需要重構原始服務,以便所有業務邏輯都在一個新的與服務無關的公共庫中,您的ASMX和SOAP服務都可以使用該庫。
完成后,兩種服務中都應有最少的代碼,同時允許通過ASMX端點向后兼容以及將來在SOAP端點中進行擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.