Geoff Chappell - Software Analyst
Maps the specified member to a SOAP header
[ define_attribute = "soap_header", argument_list = { "value", "required", "in", "out" }, argument_type ("value") = eANSIStringValue, argument_type ("required") = eBooleanValue, argument_type ("in") = eBooleanValue, argument_type ("out") = eBooleanValue, required_arguments = "value", default_value ("required") = "false", default_value ("in") = "true", default_value ("out") = "true", help_string = "Maps the specified member to a SOAP header", usage = eCoClassMethodUsage | eMethodUsage, group = eHPS, repeatable = true, shipping = true ];
The product documentation says that this attribute is not repeatable. That the documentation is incorrect is easily demonstrated. Compile
#define _WIN32_WINNT 0x0400 #define _ATL_ATTRIBUTES #include <atlbase.h> #include <atlsoap.h> [ uuid ("00000000-0000-0000-0000-000000000000"), object ] __interface ITest { HRESULT Method (VOID); }; [ soap_handler ("") ] class CTest : public ITest { public: BSTR m_Name; bool m_Flag; [ soap_method, soap_header ("m_Name"), soap_header ("m_Flag") ] HRESULT Method (VOID); };
and see that the injected code accommodates both the data members that have been specified for use in SOAP headers.