結(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ā)送成功。新聞熱點
疑難解答