使用c#/ ASP.NET添加自定义SOAP标头
问题描述:
我正在尝试使用流量Web服务。下面给出了SOAP请求的一个例子。使用c#/ ASP.NET添加自定义SOAP标头
我在c#中使用WSDL结构中的Wsdl.exe创建了一个代理类。
我想我现在需要以某种方式将“authenticate”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>
这是调用Web服务方法的代理类中的代码。
[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]));
}
答
添加SOAP头是其中的一件事情,进行了与WCF更令人费解相比之前在Visual Studio .NET 2003/2005“添加Web服务引用”和创建SOAP扩展。
要在WCF中做到这一点,您需要添加一个EndPointBehavior。有很多例子,google on IEndpointBehavior和IClientMessageInspector。这article提供了一个很好的简洁的例子,但你可能需要扩大它。
我没有使用WCF。 – 2009-09-22 07:13:35
您应该使用SoapExtension http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension(VS.71).aspx。 – sipwiz 2009-09-22 08:05:00
谢谢,我已经成功地使用SoapExtension来解决标题问题。 – 2009-09-23 02:24:49