2009-09-22 4 views
1

트래픽 웹 서비스를 사용하려고합니다. 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])); 
     } 

답변

4

웹 검색 아주 비슷한 문제와 좋은 해결책에 대한 포럼 게시물을 찾았습니다. 사용 가능 - forums.asp.net/t/1137408.aspx

2

SOAP 헤더를 추가하는 것은 비교 WCF 더 복잡한 가지고 그런 것들 중 하나입니다 이전 비주얼 스튜디오 닷넷 2,005 분의 2,003에서 "웹 서비스 참조 추가"와 SOAP 확장을 만드는.

WCF에서이를 수행하려면 EndPointBehavior를 추가해야합니다. IEndpointBehavior와 IClientMessageInspector에 대한 몇 가지 예가 있습니다. 이 article은 멋진 간결한 예를 제공하지만 확장해야 할 수도 있습니다.

+0

WCF를 사용하고 있지 않습니다. –

+1

SoapExtension http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension(VS.71).aspx를 사용해야합니다. – sipwiz

+0

감사합니다. 저는 헤더 문제를 극복하기 위해 SoapExtension을 성공적으로 사용했습니다. –

관련 문제