代码之家  ›  专栏  ›  技术社区  ›  Kangkan

GSOAP:如何在SOAP头中传递信息

  •  2
  • Kangkan  · 技术社区  · 15 年前

    我希望在SOAP头中发送一些信息,比如身份验证令牌。我使用的是gsoap/c/linux。请帮我怎么通过?

    我的 SOAP_ENV__Header 看起来像

    /* SOAP Header: */
    struct SOAP_ENV__Header
    {
        struct ns3__Header *ns3__MyHeader;  /* mustUnderstand */
    };
    

    ns3__Header 看起来像

    /* ns3:Header */
    struct ns3__Header
    {
        char *Value;    /* optional element of type xsd:string */
    };
    
    1 回复  |  直到 13 年前
        1
  •  2
  •   Kangkan    15 年前

    抱歉打扰了大家。我明白了。我的做法是:

        soap_init(&mysoap);
        mysoap.header = (SOAP_ENV__Header *)soap_malloc(&mysoap, sizeof(SOAP_ENV__Header));
        mysoap.header->ns3__MyHeader = (ns3__Header*)malloc(sizeof(ns3__Header));
        mysoap.header->ns3__MyHeader->Value = (char*)malloc(10 * sizeof(char));
        strcpy(mysoap.header->ns3__MyHeader->Value, str);
    

    但我必须抑制mustUnderstand属性,如下所示:

    SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type)
    {
          if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Header), type))
                return soap->error;
          //KNG
          //soap->mustUnderstand = 1;
          if (soap_out_PointerTons3__Header(soap, "ns3:MyHeader", -1, &a->ns3__MyHeader, ""))
                return soap->error;
          return soap_element_end_out(soap, tag);
    }