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即可实现自定义了。

  • 相关阅读:
    JDK中ClassLoader的分类以及ClassLoader间的层次关系
    java动态加载机制
    hibernate_boolean类型的处理
    hibernate_annotation字段映射位置
    hibernate基本配置
    hibernate3.3.2搭建Junit日志环境
    hibernate基本配置show_sql、sql_format
    hibernate3.3.2搭建log4j日志环境
    ios错误ignoring file xxx missing required architecture x86_64 in file
    转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS
  • 原文地址:https://www.cnblogs.com/tiancai/p/13528228.html
Copyright © 2011-2022 走看看