国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C#訪問Java的WebService添加SOAPHeader驗證的問題

2019-11-17 01:51:59
字體:
供稿:網(wǎng)友

C#訪問java的WebService添加SOAPHeader驗證的問題

這兩天做與公司OA的接口,發(fā)現(xiàn)C#訪問Java的WebService需要提供一個SOAP的頭驗證信息,但是WebService的WSDL中并沒有提供約定的驗證信息,所以Visual Studio生成的代理類并沒有發(fā)現(xiàn)這些內(nèi)容,所以這個SOAPHeader就必須要自己組織,還遇到一個問題就是SOAP頭部信息,OA那邊還按照不知道什么實例添加了一個根節(jié)點沒有的命名空間,這就致使SOAPHeader內(nèi)容一直報傳輸錯誤,廢話不多說,上兩個階段的示例。首先,要創(chuàng)建一個繼承自System.Web.Services.PRotocols.SoapHeader的RequestSOAPHeader類,在其中添加UserName和PassWord兩個屬性,代碼如下:publicclassRequestSOAPHeader: System.Web.Services.Protocols.SoapHeader{ publicstringuser {get;set; } publicstringpassword {get;set; }}生成的WebService代理類中設(shè)置成屬性成員:publicpartialclassISysNotifyTodoWebServiceService{ publicRequestSOAPHeaderRequestSOAPHeader {get;set; }}在訪問的WebService方法上方添加SOAPHeader的聲明:[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", RequestNamespace="http://webservice.notify.sys/", ResponseNamespace="http://webservice.notify.sys/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)][return: System.xml.Serialization.XmlElementAttribute("return", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)][SoapHeader("RequestSOAPHeader")]publicnotifyTodoAppResultsetTodoDone([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]notifyTodoRemoveContextarg0) { object[] results =this.Invoke("setTodoDone",newobject[] { arg0}); return((notifyTodoAppResult)(results[0]));}發(fā)送報文截圖如下:結(jié)果返回用戶名密碼錯誤:查OA系統(tǒng)訪問文檔,才發(fā)現(xiàn)SOAPHeader需要放在特殊的命名空間內(nèi)容,但是因為原WSDL可能因為安全原因就沒有任何顯式聲明,經(jīng)過一番折騰終于明白如何去改造WebService代理類在報文節(jié)點上面加自定義的命名空間和前綴。原報文要求如下:<RequestSOAPHeader xmlns:tns="http://sys.webservice.client"> <tns:UserName> username </tns:UserName> <tns:Password> password </tns:Password></RequestSOAPHeader>將原有報文頭對象RequestSOAPHeader更改為:publicclassRequestSOAPHeader: System.Web.Services.Protocols.SoapHeader{publicRequestSOAPHeader() { Namespaces =newXmlSerializerNamespaces(); } [XmlElement(Namespace ="http://sys.webservice.client")]publicstringUserName{get;set; } [XmlElement(Namespace ="http://sys.webservice.client")]publicstringPassword {get;set; } [XmlNamespaceDeclarations]publicXmlSerializerNamespacesNamespaces {get;set; }}然后在代理類的構(gòu)造函數(shù)中實例化RequestSOAPHeader對象時,將需要的命名空間定義添加到Namespaces中:RequestSOAPHeader =newOA.RequestSOAPHeader();RequestSOAPHeader.Namespaces.Add("tns","http://sys.webservice.client");RequestSOAPHeader.UserName=Settings.Default.ConnectUserName;RequestSOAPHeader.Password=Settings.Default.ConnectPassword;改造完畢,然后再進(jìn)行訪問,就會生成如下報文:顯示發(fā)送成功。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇信县| 永州市| 乐陵市| 深圳市| 南投县| 黎川县| 普宁市| 巴塘县| 盐津县| 三门县| 志丹县| 双城市| 三门峡市| 巨鹿县| 绩溪县| 双峰县| 紫阳县| 吕梁市| 灌南县| 昌图县| 海兴县| 西乌珠穆沁旗| 密云县| 二连浩特市| 镇远县| 湘阴县| 木兰县| 弥勒县| 繁峙县| 荔浦县| SHOW| 岳西县| 工布江达县| 昌邑市| 新和县| 旺苍县| 舞阳县| 常山县| 五峰| 石台县| 司法|