.net自定義WebService WSDL
阿新 • • 發佈:2020-08-19
最近工作需要向第三方提供一個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即可實現自定義了。