在 gSoap 服务器中执行服务器操作之前获取回调

Get callback before executing server operation in gSoap server

有没有办法在执行服务器操作之前从 gSoap 框架获得回调?我可以在文档中读到有一个回调 (fserveloop) 在服务器操作成功完成后立即调用,但之前不会。

我需要这个的原因是因为程序从多个套接字接收请求,而其中一个套接字应该只允许一部分操作。因此需要在解析完成后执行访问检查,以便我们知道调用了哪个操作,但在操作执行之前。或者也许有更好的方法?

Is there a way to get a callback from the gSoap framework before a server operation is executed?

您可以使用其他回调之一,例如被调用以解析 HTTP header 的 fparse 回调。您只需要确保之后调用原始 fparse 回调函数即可。像这样:

soap->user = (void*)soap->fparse; // save original callback to the user variable
soap->fparse = myfparse;          // set new callback

哪里

int myfparse(struct soap *soap)
{
   // call original callback
   int err = soap->user != NULL ? ((int (*)(struct soap*))soap->user)(soap) : SOAP_OK;
   if (err == SOAP_OK)
   {
      ... // your logic goes here
   }
   return err;
}

注:

  1. 您可以在解析 HTTP header 之前或之后添加逻辑。
  2. 您可以通过将 soap->user 设置为包含数据的结构和您需要的原始 fparse 函数指针的成员来将数据传递给您的逻辑。
  3. 强制转换 ((int (*)(struct soap*)) 只有在确保将 soap->user 设置为原始 fparse 后在 myfparse 中使用它时才是安全的] 函数。