最近工作需要向第三方提供一个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即可实现自定义了。

.net自定义WebService WSDL的更多相关文章

  1. webservice第二篇【自定义webservice服务、soa、uddi概念、soap协议】

    自定义webservice服务 我们在上一章节中已经使用wsimport生成本地代理来调用webservice的服务了,其实我们自己写的web应用程序也是可以发布webservice的 我们发布了we ...

  2. webservice wsdl接口配置与调用

    准备包 WebRoot/WEB-INF/lib/axis2-adb-1.6.2.jarWebRoot/WEB-INF/lib/axis2-ant-plugin-1.6.2.jarWebRoot/WEB ...

  3. webservice wsdl axis2报错 Provider com.bea.xml.stream.MXParserFactory not found

    错误信息: Exception in thread "main" javax.xml.stream.FactoryConfigurationError: Provider com. ...

  4. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  5. PHP调用webService WSDL 接口发送邮件

    1.什么是 webService WSDL?  webService WSDL 暴露一些接口给第三方调用,在底层会转化成一个HTTP请求,主要是不同语言之间为了通讯的一个协议,比如发送邮件的系统是用J ...

  6. WebService wsdl没有types的问题

    刚学WebService就遇到一个问题,按视屏敲的代码,它生成的wsdl页面与自己的不一样,我的没有types,结构完全不同了 This XML file does not appear to hav ...

  7. webservice wsdl 生成服务

    由于之前的示例是在当前项目下发布的server,也是在当前项目下访问的server发布的webservice.但在实际应用中,我们的服务端往往是和客户諯分离的,甚至它们是不同的项目中不同的人写的.而像 ...

  8. SharePoint 列表项通过自定义WebService读取

    简述:给其他系统提供集成,发现SharePoint自带的WebService各种不好使,索性就自己写一点,也当做自己学习的记录了.当然内容比较简单,希望大侠们不要介意,也不要骂我啊.好了,进入正题吧. ...

  9. 来看下,C# WebService WSDL自动生成代码,数组参数的BUG。。。ArrayOfString

    ArrayOfString ArrayOfString ArrayOfString 解决C#客户端 ArrayOfString 参数问题.(希望搜索引擎能搜到,帮你解决神奇的ArrayOfString ...

随机推荐

  1. LayaAir引擎——(六)

    LayaAir引擎——TiledMap地图图块属性获取和进行墙壁碰撞检测 需要的软件: TiledMap LayaAir IDE 1.0.2版本 所画的地图: pass层: floor层: pass层 ...

  2. C# foreach,等量代换,冒泡排序

    foreach: foreach (int h in a) //可以将数组读出来(自动遍历数组)                {                    Console.WriteLi ...

  3. 使用C#程序处理PowerPoint文件中的字符串

    最近, 有同事偶然发现Microsoft  Office PowerPoint可以被看作是一个压缩包,然后通过WinRAR解压出来一组XML文件.解压出来的文件包括: 一个索引文件名称为:[Conte ...

  4. mac编辑器快捷键(自己摸索出来的)

    control + a  行首 control + e  行尾 control + f   向右移动 control + b 向左移动 control + k   删除光标后面 cmd + delet ...

  5. case的执行顺序 & 嵌套使用

    我们先来看一下表中数据的情况: select * from PRODUCTINFO PRODUCTID PRODUCTNAME PRODUCTPRICE QUANTITY CATEGORY DESPE ...

  6. yii 初步安装

    第一步: window下点击>开始 >运行CMD命令. 第二步:进入Yiic文件的目录   (例如在D盘里面 D:/yii/framework) 第三步:D:\yii\framework& ...

  7. Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~ 第一阶段--获取中断号 每 ...

  8. C++ 虚函数,纯虚函数的一些问题

    #include <iostream> using namespace std; #define cendl cout << endl; class AA{//这是一个纯虚函数 ...

  9. MFC下OpenGL入门(可以用)

    MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...

  10. MyEclipse XFire Web Service

    我们在做系统集成时,经常会需要调用webservice接口,本文将讲解在myeclipse中建立一个webservice项目,编写接口和实现类, 并且发布webservice,最后在myeclipse ...