从ASX到WCF的升级Web服务向后兼容



最近,我已经升级了我的ASMX Web服务,这些Web服务将两个操作公开了WCF,以与不同的消费者合作。通过此升级,WSDL SOAP动作从<namespace>/<operation>更改为<namespace>/<service>/<operation>。问题是,我仍然需要能够使用以前的消费者使用我的服务,而且他们只有我以前的WSDL定义。当他们发送请求时,他们会收到HTTP 500错误。

我尝试了什么:

  1. 强制我的操作合同方法对Action="*"做出响应,直到我对另一个操作做同样的操作。我了解到我无法使用多种操作合同方法来响应任何肥皂动作。
  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();
        }

预先感谢您。

向后兼容从升级的Web服务从ASMX到WCF

尽管您可能可以将ASMX和SOAP服务融合到一个系统中,但这非常棘手,因为他们俩都会为HTTP所有权而战。

取而代之的是,您最好维护原始的ASMX服务并创建 new SOAP服务。

这允许两个端点:

  1. 您的原始ASMX HTTP端点
  2. 任何协议中的新肥皂端点。可以是http:8080;TCP;或管道(尽管可能不是互联网的后者)

普通业务逻辑

接下来,您需要重构原始服务,以便所有业务逻辑都在一个新的普通服务库中,您的ASMX和SOAP服务都可以使用。

完成后,两种服务中都应有最小的代码,同时允许通过ASMX端点向后兼容,并在SOAP端点中扩展。

相关内容

  • 没有找到相关文章

最新更新