zoukankan      html  css  js  c++  java
  • .net自定义WebService WSDL

    最近工作需要向第三方提供一个WebService服务,坑爹的是第三方背景牛X,我方提供的服务必须完全遵照其客户端方预先定义好了的接口,一个符号都不允许修改。

    .net平台编写的WebService由于是根据微软的标准,所以在wsdl方法名上面加上了特定的后缀,如<wsdl:port name="Service1Soap" binding="tns:Service1Soap"> 其中Soap就是默认加入的。为了完全适应调用方,这种默认方式显然是不行的,网上、网下研究了半天,最终采用了扩展SoapExtensionReflector类的方法来截获WSDL的最终生成。其方法如下:

    自定义一个继承自SoapExtensionReflector的类,重载ReflectDescription方法,在这个方法中对WSDL进行特定干预,基本上是想干啥就干啥,呵呵。

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Services.Description;
    using System.Xml.Serialization;
    using System.Xml.Schema;
    using System.Xml;
    
    public class WSDLReflector : SoapExtensionReflector
        {
            /// <summary>
            /// ws方法不做修改
            /// </summary>
            public override void ReflectMethod()
            {
    
            }
    
            /// <summary>
            /// 继承修改描述方法
            /// </summary>
            public override void ReflectDescription()
            {
    
        ServiceDescription description = ReflectionContext.ServiceDescription;
    
     foreach (Service service in description.Services)
                {
    
                    foreach (Port port in service.Ports)
                    {
    
                        port.Name = port.Name.Replace("uaService", "uaWebService");
       }
    
                }
    
            }
        }
    复制代码

    此类根据自己的实际需要编写完毕后,需要在项目Web.confing设置节点,才能应用,节点设置如下:

    复制代码
    <system.web>
        <webServices>
          <!--处理WSDL标签修改-->
          <soapExtensionReflectorTypes>
            <!--<add type ="DUS.Pub.Ws.WSDLReflector,DUS.Pub"/>-->
            <add type ="AppManager.Code.WSDLReflector,AppManager"/>
          </soapExtensionReflectorTypes> 
        </webServices> 
    </system.web>
    复制代码

    至此编译生成,本项目生成的WebService服务WSDL即可实现自定义了。

  • 相关阅读:
    【Nginx学习】安装及常用命令
    【Nginx学习】基础知识
    【Nginx学习】Xshell7连接CentOS7艰难轶事
    【LeetCode刷题】5343. 多次求和构造目标数组:妙解
    【LeetCode刷题】1353. 最多可以参加的会议数目
    【转载】priority_queue用法
    【LeetCode刷题】供暖器:妙解
    【妙解】重复的子字符串
    【转载学习】基金理财学习
    【转载】sync_with_stdio + cin.tie
  • 原文地址:https://www.cnblogs.com/tiancai/p/13528228.html
Copyright © 2011-2022 走看看