트래픽 웹 서비스를 사용하려고합니다. SOAP 요청의 예는 다음과 같습니다.C#/ASP.NET을 사용하여 사용자 지정 SOAP 헤더 추가
WSDL 구조에서 Wsdl.exe를 사용하여 C#에서 프록시 클래스를 만들었습니다.
내가 지금 어떻게해야한다고 생각하십니까? SOAP 호출에 SOAP 헤더에 '인증'SOAP 헤더를 삽입하십시오. 서비스 메서드 호출에 헤더를 추가하는 방법을 잘 모르겠습니다.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://www.inteleacst.com.au/wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<ns1:authenticate>
<SOAP-ENC:Struct>
<username>username</username>
<password>password</password>
</SOAP-ENC:Struct>
</ns1:authenticate>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:getAllTraffic>
<States SOAP-ENC:arrayType="xsd:string[3]" xsi:type="ns1:State_Arr">
<item xsi:type="xsd:string">VIC</item>
<item xsi:type="xsd:string">NSW</item>
<item xsi:type="xsd:string">NT</item>
</States>
<EventCodes SOAP-ENC:arrayType="xsd:int[1]" xsi:type="ns1:EventCode_arr">
<item xsi:type="xsd:int">802</item>
</EventCodes>
</ns1:getAllTraffic>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
다음은 웹 서비스 메소드를 호출하기위한 프록시 클래스의 코드입니다.
[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://webservice.intelecast.com.au/traffic/PublicSoap/server.php#getAllTraffic", RequestNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php", ResponseNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php")]
[return: System.Xml.Serialization.SoapElementAttribute("return")]
public TrafficInfo[] getAllTraffic(string[] States, int[] EventCodes) {
object[] results = this.Invoke("getAllTraffic", new object[] {
States,
EventCodes});
return ((TrafficInfo[])(results[0]));
}
WCF를 사용하고 있지 않습니다. –
SoapExtension http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension(VS.71).aspx를 사용해야합니다. – sipwiz
감사합니다. 저는 헤더 문제를 극복하기 위해 SoapExtension을 성공적으로 사용했습니다. –