【问题标题】:Backwards and forwards compatibility from an upgraded web service from ASMX to WCF从升级的 Web 服务从 ASMX 到 WCF 的向后和向前兼容性
【发布时间】:2017-12-13 20:10:32
【问题描述】:

最近我升级了我的 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();
        }

提前谢谢你。

【问题讨论】:

    标签: c# web-services wcf soap wsdl


    【解决方案1】:

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

    虽然您可以将 ASMX 和 SOAP 服务融合到一个系统中,但这会相当棘手,因为它们都会争夺 HTTP 所有权。

    相反,您可能会更好地维护您原来的 ASMX 服务并创建一个 SOAP 服务。

    这允许两个端点:

    1. 您的原始 ASMX HTTP 端点
    2. 采用任何协议的新 SOAP 端点。可能是 HTTP:8080;通信协议;或管道(尽管可能不是后者用于 Internet)

    通用业务逻辑

    接下来,您需要重构原始服务,以便所有业务逻辑都位于一个新的、与服务无关的通用库中,您的 ASMX 和 SOAP 服务都可以使用该库。

    一旦完成,这两个服务中应该有最少的代码,同时允许通过 ASMX 端点向后兼容并在 SOAP 端点中进行未来扩展。

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多