• .NET自动生成自定义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即可实现自定义了。

  • 相关阅读:
    推送
    XPath
    XML
    在xcode 6.4 环境下写的demo 在xode7 环境下 网络请求有问题
    SVN 搭建
    翻译
    iOS面试题积累
    安卓扁平化之路专题(三)Android 5.0新特性
    Android @SuppressLint @TargetApi 总结
    Android_support_v4,Android_support_v7,Android_support_v13区别
  • 原文地址:https://www.cnblogs.com/tiancai/p/13528268.html
Copyright © 2020-2023  润新知