• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            浪跡天涯

            唯有努力...
            努力....再努力...

            gsoap使用心得!

            最近換了個工作環境,現在在大望路這邊上班,呵,剛上班接到的任務就是熟悉gsoap!廢話少說,現在開始gSoap學習!

            gSOAP是一個夸平臺的,用于開發Web Service服務端和客戶端的工具,在WindowsLinuxMAC OSUNIX下使用CC++語言編碼,集合了SSL功能。

            下載地址:http://sourceforge.net/projects/gsoap2

            官方網站:http://genivia.com/Products/gsoap/index.html

            對于Windows平臺下開發客戶端,首先下載最新的gsoap_win32_2.7.6c.zip包,具體在以下地址:http://optusnet.dl.sourceforge.net/sourceforge/gsoap2/gsoap_win32_2.7.6c.zip

            首先查看gsoap的User's Guide,基本就能對gsoap有個全面的了解,通過閱讀Sample里的例子程序深入。然后搜索網上其它一些文章,比如:
            gSOAP簡單多線程服務器程序 http://blog.chinaunix.net/u1/55091/showart_430965.html
            純c gSoap實現WebService            http://hi.baidu.com/2sky2sea/blog/item/40ec5555680279c1b745ae9b.html 


            接下來我結合自己的實踐與理解,講講VC用gsoap下編寫webService和客戶端程序,有不對的地方還請大家指正,謝謝。
            我以網上出現的實現一個簡單的加法函數為例,講講我在操作過程中遇到的問題。

            一 服務器端
            1.首先編寫 add.h文件:
            1//gsoap ns service name: add
            2//gsoap ns service namespace: http://localhost/add.wsdl
            3//gsoap ns service location: http://localhost
            4//gsoap ns service executable: add.cgi
            5//gsoap ns service encoding: encoded
            6//gsoap ns schema namespace: urn:add
            7
            8int ns__add( int num1, int num2, int* sum );
            9

            2.用gsoap/bin目錄下的soapcpp2.exe程序,生成一些文件。可以把soapcpp2.exe拷貝到一add.h目錄下,用cmd執行soapcpp2.exe add.h就可以,在這個目錄下會自動生成許多將來有用的文件,如add.namap,soapH.h,soapC.cpp,soapClient.cpp,soapServer.cpp等文件。soapcpp2.exe可以帶參數執行,具體執行soapcpp2.exe -h查看。

            3.新建一個win32控制臺工程,加入wsock32.lib庫,將剛才生成的那些文件添加到工程中。然后編寫webserver.cpp主程序:
            #include "add.h"
            #include 
            "add.nsmap"

            int main(int argc, char* argv[])
            {
                
                
            int m, s; /* master and slave sockets */
                
            struct soap add_soap;
                soap_init(
            &add_soap);
                
            //soap_set_namespaces(&add_soap, add_namespaces);
                
                
            if (argc < 2)
                
            {
                    printf(
            "usage: %s <server_port> \n", argv[0]);
                    exit(
            1);
                }

                
            else
                

                    m 
            = soap_bind(&add_soap, NULL, atoi(argv[1]), 100);
                    
            if (m < 0)
                    
            {
                        soap_print_fault(
            &add_soap, stderr);
                        exit(
            -1);
                    }

                    
                    fprintf(stderr, 
            "Socket connection successful: master socket = %d\n", m);
                    
            for ( ; ; )
                    

                        s 
            = soap_accept(&add_soap); 
                        
            if (s < 0)
                        

                            soap_print_fault(
            &add_soap, stderr);
                            exit(
            -1);
                        }

                        fprintf(stderr, 
            "Socket connection successful: slave socket = %d\n", s);
                        
                        soap_serve(
            &add_soap);//該句說明該server的服務
                        soap_end(&add_soap);
                    }

                }

                
            return 0;
            }

            //server端的實現函數與add.h中聲明的函數相同,但是多了一個當前的soap連接的參數
            int ns__add(struct soap *add_soap, int num1, int num2, int *sum)
            {
                
            *sum = num1 + num2;
                
            return 0;
            }


            4. 編譯這個程序,會提示錯誤,將gsoap_win32目錄下stdsoap2.cpp,stdsoap2.h文件加入工程,重新編譯如果還有錯誤,可能是你將add.h生成的文件添加入工程出錯的原因。實際上在編寫server程序時,無須帶Client的那些文件,還有帶Lib的文件也無須添加到工程中。再重新編譯應該就沒有問題了,啟動4567端口,在ie中輸入localhost:4567,如果顯示xml頁面,說明程序已經啟動。

            二 對應的客戶端
            1。客戶端程序代碼如下:
            #include <stdio.h>
            #include 
            <stdlib.h>
            #include 
            "soapH.h"
            #include 
            "add.nsmap"


            int add(const char* server, int num1, int num2, int *sum);

            int main(int argc, char **argv) 
            {
                
            int result = -1;
                
            char* server="http://localhost:4567";
                
            int num1 = 0;
                
            int num2 = 0;
                
            int sum = 0;
                
            if( argc < 3 )
                
            {
                    printf(
            "usage: %s num1 num2 \n", argv[0]);
                    exit(
            0);
                }

                
                num1 
            = atoi(argv[1]);
                num2 
            = atoi(argv[2]);
                
                result 
            = add(server, num1, num2, &sum);
                
            if (result != 0)
                
            {
                    printf(
            "soap err,errcode = %d\n", result);
                }

                
            else
                
            {
                    printf(
            "%d+%d=%d\n", num1, num2, sum );
                }

                
            return 0;
            }


            int add( const char* server, int num1, int num2, int *sum )
            {
                
            struct soap add_soap;
                
            int result = 0;
                soap_init(
            &add_soap);
            //    soap_set_namespaces(&add_soap, add_namespaces);
                
                
            //該函數是客戶端調用的主要函數,后面幾個參數和add.h中聲明的一樣,前面多了3個參數,函數名是接口函數名ns__add前面加上soap_call_
                soap_call_ns__add( &add_soap, server, "", num1, num2, sum );
                
            if(add_soap.error)
                
            {
                    printf(
            "soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
                    result 
            = add_soap.error;
                }
             
                soap_end(
            &add_soap);
                soap_done(
            &add_soap);
                
            return result;
            }

            2.客戶端程序既可以新建一個新的win32控制臺程序,將剛才生成的nsmap,soapH.h,soapClient.h等文件加入工程,編譯既可。我是直接在原先工程中加入一客戶端代碼,將webserver.cpp文件移除,并且將soapServer.cpp等server端需要的文件移除,將soapClient.cpp等client端需要的cpp添加到工程,編譯既可。
            3.啟動server程序,F5客戶端程序,經測試正常。

            三 遇到的問題
            1.server端可以編譯成CGI方式執行,而并不是綁定到某個端口,這種方式我沒有實踐。
            if (argc < 2// no args: assume this is a CGI application 
               
                  soap_serve(
            &soap); // serve request, one thread, CGI style 
                  soap_destroy(&soap); // dealloc C++ data 
                  soap_end(&soap); // dealloc data and clean up 
            }
            2.在編譯服務器及客戶端程序時一開始對add.h生成的文件添加到工程,經常出現問題,需要自己不調試。特別是鏈接時段,server/client要與其生成的文件相對應,server調用生成的soapserver.cpp,client調用生成的soapclient.cpp文件。
            3.多線程方式,在windows下建議用pthread_win32庫,這里給出多線程下的例子。
            一 gSOAP需要的頭文件:

            //gsoap ns service name: calc
            //gsoap ns service style: rpc
            //gsoap ns service encoding: encoded
            //gsoap ns service namespace: http://127.0.0.1:8089/calc.wsdl
            //gsoap ns service location: http://127.0.0.1:8089/cal
            //gsoap ns schema  namespace:    urn:calc
            int ns__add(double a, double b, double *result);
            int ns__sub(double a, double b, double *result);
            int ns__mul(double a, double b, double *result);
            int ns__div(double a, double b, double *result);
            int ns__pow(double a, double b, double *result);

            二 多線程服務器關鍵代碼

            #include 
            #include  
            "calc.nsmap"
            #include  
            "soapH.h"

            /////////////////////////////////////////////////////////////////////////
            ///宏與全局變量的定義

            #define  BACKLOG (100)  
            #define  MAX_THR (10)   
            #define  MAX_QUEUE (1000)


            pthread_mutex_t queue_cs;                        
            //隊列鎖
            pthread_cond_t  queue_cv;                          //條件變量
            SOAP_SOCKET     queue[MAX_QUEUE];   //數組隊列
            int                           head =0, tail =0;          //隊列頭隊列尾初始化         
            //////////////////////////////////////////////////////////////////////////


            //////////////////////////////////////////////////////////////////////////

            void *      process_queue(void *);        //線程入口函數
            int         enqueue(SOAP_SOCKET);  //入隊列函數
            SOAP_SOCKET dequeue(void);         //出隊列函數

            //////////////////////////////////////////////////////////////////////////
            //線程入口函數
            void * process_queue(void * soap)
            {
              
            struct soap * tsoap = (struct soap *)soap;
              
            for(;;)
              
            {
                    tsoap
            ->socket = dequeue();
                    
            if (!soap_valid_socket(tsoap->socket))
                   
            {
                     
            break;
                    }

                    soap_serve(tsoap);
                    soap_destroy(tsoap);
                    soap_end(tsoap);
              }

              
            return NULL;
            }


            //入隊列操作
            int enqueue(SOAP_SOCKET sock)
            {
              
            int status = SOAP_OK;
              
            int next;
              pthread_mutex_lock(
            &queue_cs);
              next 
            = tail +1;
              
            if (next >= MAX_QUEUE) 
                next 
            = 0;
              
            if (next == head) 
                  status 
            = SOAP_EOM;
              
            else
              
            {
                queue[tail] 
            =sock;
                tail 
            = next;
              }

              pthread_cond_signal(
            &queue_cv);
              pthread_mutex_unlock(
            &queue_cs);
              
            return status;
            }


            //出隊列操作
            SOAP_SOCKET dequeue()
            {
              SOAP_SOCKET sock;
              pthread_mutex_lock(
            &queue_cs);
               
            while (head == tail )
               
            {
                      pthread_cond_wait(
            &queue_cv,&queue_cs);
               }

              sock 
            = queue[head++];
              
            if (head >= MAX_QUEUE)
                    
            {
                head 
            =0;
              }

              pthread_mutex_unlock(
            &queue_cs);
              
            return sock;
            }



            //////////////////////////具體服務方法////////////////////////////////////////
            //加法的實現
            int ns__add(struct soap *soap, double a, double b, double *result)
            {
                  
            *result = a + b;
                  
            return SOAP_OK;
            }
             
            //減法的實現
            int ns__sub(struct soap *soap, double a, double b, double *result)

                 
            *result = a - b;
                 
            return SOAP_OK;
            }
             
            //乘法的實現
            int ns__mul(struct soap *soap, double a, double b, double *result)

                 
            *result = a * b;
                 
            return SOAP_OK;
            }
             
            //除法的實現
            int ns__div(struct soap *soap, double a, double b, double *result)

               
            if (b)
                   
            *result = a / b;
               
            else
              
            {
                     
            char *= (char*)soap_malloc(soap, 1024);
                     sprintf(s, 
            "Can't">http://tempuri.org/">Can't divide %f by %f", a, b);
                     return soap_sender_fault(soap, "Division by zero", s);
              }

              
            return SOAP_OK;
            }
             
            //乘方的實現
            int ns__pow(struct soap *soap, double a, double b, double *result)

              
            *result = pow(a, b);
              
            if (soap_errno == EDOM) /* soap_errno 和errorno類似, 但是和widnows兼容 */
              

                
            char *= (char*)soap_malloc(soap, 1024);
                sprintf(s, 
            "Can't take the power of %f to  %f", a, b);
                sprintf(s, 
            "Can't">http://tempuri.org/">Can't take power of %f to %f", a, b);
                return soap_sender_fault(soap, "Power function domain error", s);
              }

              
            return SOAP_OK;
            }
             

            //////////////////////////////////////////////////////////////////////////////////////////////////////
            //主函數
            int main(int argc,char ** argv)
            {
              
            struct soap ServerSoap;
                 
            //初始話運行時環境
                soap_init(&ServerSoap);
                
            //如果沒有參數,當作CGI程序處理
                if (argc <2
                
            {       
                       
            //CGI 風格服務請求,單線程
                      soap_serve(&ServerSoap);
                      
            //清除序列化的類的實例
                     soap_destroy(&ServerSoap);
                     
            //清除序列化的數據
                    soap_end(&ServerSoap);     
               }
            else
               
            {
                 
            struct soap * soap_thr[MAX_THR];
                 pthread_t tid[MAX_THR];
                 
            int i,port = atoi(argv[1]);
                 SOAP_SOCKET m,s;
                  
            //鎖和條件變量初始化
                 pthread_mutex_init(&queue_cs,NULL);
                 pthread_cond_init(
            &queue_cv,NULL);
                 
            //綁定服務端口
                m = soap_bind(&ServerSoap,NULL,port,BACKLOG);
                
            //循環直至服務套接字合法
                while (!soap_valid_socket(m))
               
            {
                            fprintf(stderr,
            "Bind port error! ");
                            m 
            = soap_bind(&ServerSoap,NULL,port,BACKLOG);
                }

                fprintf(stderr,
            "socket connection successful %d ",m);
                            
                 
            //生成服務線程
                for(i = 0; i <MAX_THR; i++)

               
            {
                  soap_thr[i] 
            = soap_copy(&ServerSoap);
                  fprintf(stderr,
            "Starting thread %d ",i);
                  pthread_create(
            &tid[i],NULL,(void*(*)(void*))process_queue,(void*)soap_thr[i]);
                }

                            
                
            for(;;)
                
            {
                  
            //接受客戶端的連接
                  s = soap_accept(&ServerSoap);
                  
            if (!soap_valid_socket(s)) 
                  
            {
                    
            if (ServerSoap.errnum) 
                                            
            {
                      soap_print_fault(
            &ServerSoap,stderr);
                      
            continue;
                    }
            else
                    
            {
                      fprintf(stderr,
            "Server timed out ");
                      
            break;
                    }

                  }

                   
            //客戶端的IP地址
                  fprintf(stderr,"Accepted connection from IP= %d.%d.%d.%d socket = %d ",
                                           ((ServerSoap.ip)
            >>24)&&0xFF,((ServerSoap.ip)>>16)&0xFF,((ServerSoap.ip)>>8)&0xFF,(ServerSoap.ip)&0xFF,(ServerSoap.socket));
                  
            //請求的套接字進入隊列,如果隊列已滿則循環等待
                   while(enqueue(s) == SOAP_EOM)
                            Sleep(
            1000);
                }

                
            //服務結束后的清理工作
                for(i = 0; i < MAX_THR; i++)
                
            {
                  
            while (enqueue(SOAP_INVALID_SOCKET) == SOAP_EOM) 
                   
            {
                       Sleep(
            1000);
                  }

                }

                
            for(i=0; i< MAX_THR; i++)
                
            {
                  fprintf(stderr,
            "Waiting for thread %d to terminate ..",i);
                  pthread_join(tid[i],NULL);
                  fprintf(stderr,
            "terminated ");
                  soap_done(soap_thr[i]);
                  free(soap_thr[i]);
                }

                pthread_mutex_destroy(
            &queue_cs);
                pthread_cond_destroy(
            &queue_cv);
              }

                
            //分離運行時的環境
              soap_done(&ServerSoap);
              
            return 0;
            }

            posted on 2008-06-19 15:26 浪跡天涯 閱讀(100557) 評論(79)  編輯 收藏 引用 所屬分類: Lib

            評論

            # re: gsoap使用心得! 2008-06-19 15:49 true

            有空也試試gsoap,每天上班做地鐵經過大望路:)  回復  更多評論   

            # re: gsoap使用心得! 2008-06-19 15:50 true

            順便問一下:貴公司干啥滴?  回復  更多評論   

            # re: gsoap使用心得! 2008-10-11 07:52 zyx

            client端是java的webservice(vwindows),server端是goap的server(solaris)可以么?  回復  更多評論   

            # re: gsoap使用心得! 2008-10-13 09:15 浪跡天涯

            可以的,你可以參考我的另一篇文章:
            <<webservice的互操作問題>>講得就是跨語言之間的webservice操作!  回復  更多評論   

            # re: gsoap使用心得! 2008-11-03 10:42 風云

            addtest error LNK2005: "int __cdecl soap_serve(struct soap *)" (?soap_serve@@$$FYAHPAUsoap@@@Z) already defined in soapServer.obj
            addtest error LNK2005: "int __cdecl soap_serve(struct soap *)" (?soap_serve@@YAHPAUsoap@@@Z) already defined in soapServer.obj
            addtest error LNK2005: "int __cdecl soap_serve_ns__add(struct soap *)" (?soap_serve_ns__add@@$$FYAHPAUsoap@@@Z) already defined in soapServer.obj
            addtest error LNK2005: "int __cdecl soap_serve_ns__add(struct soap *)" (?soap_serve_ns__add@@YAHPAUsoap@@@Z) already defined in soapServer.obj
            addtest error LNK2005: "int __cdecl soap_serve_request(struct soap *)" (?soap_serve_request@@$$FYAHPAUsoap@@@Z) already defined in soapServer.obj
            addtest error LNK2005: "int __cdecl soap_serve_request(struct soap *)" (?soap_serve_request@@YAHPAUsoap@@@Z) already defined in soapServer.obj
            addtest fatal error LNK1169: one or more multiply defined symbols found
            你好樓主,出現這樣的問題怎么解決,我試用了很多方法都解決不掉謝謝

              回復  更多評論   

            # re: gsoap使用心得! 2008-11-03 10:48 浪跡天涯

            看出錯信息好像是你把soapServerLib.cpp等文件也添加到了工程中,產生重復定義的錯誤。你用gsoap生成服務器端 客戶端的文件后 并不是把生成的所有文件都拷到工程中,而只是拷貝你所需要的文件到工程目錄里,你試試。  回復  更多評論   

            # re: gsoap使用心得! 2008-11-03 13:45 風云

            @浪跡天涯
            謝謝樓主,問題問題已經解決  回復  更多評論   

            # re: gsoap使用心得! 2008-12-10 10:52 start gsoap

            @風云
            請問樓主具體哪些文件是server端需要的,我編譯時提示的錯誤全是*** 未定義  回復  更多評論   

            # re: gsoap使用心得! 2008-12-10 14:39 浪跡天涯

            soapC.cpp soapH.h soapServer.cpp soapStub.h stdsoap2.cpp stdsoap2.h(stl support)這些文件  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2008-12-19 16:16 kerry

            Linking...
            soapServer.obj : error LNK2001: unresolved external symbol "int __cdecl ns__add(struct soap *,int,int,int *)" (?ns__add@@YAHPAUsoap@@HHPAH@Z)
            stdsoap2.obj : error LNK2001: unresolved external symbol _send@16
            stdsoap2.obj : error LNK2001: unresolved external symbol _WSAGetLastError@0
            stdsoap2.obj : error LNK2001: unresolved external symbol _select@20
            stdsoap2.obj : error LNK2001: unresolved external symbol _recv@16
            stdsoap2.obj : error LNK2001: unresolved external symbol _WSACleanup@0
            stdsoap2.obj : error LNK2001: unresolved external symbol _gethostbyname@4
            stdsoap2.obj : error LNK2001: unresolved external symbol _inet_addr@4
            stdsoap2.obj : error LNK2001: unresolved external symbol _getsockopt@20
            stdsoap2.obj : error LNK2001: unresolved external symbol _connect@12
            stdsoap2.obj : error LNK2001: unresolved external symbol _ioctlsocket@12
            stdsoap2.obj : error LNK2001: unresolved external symbol _htons@4
            stdsoap2.obj : error LNK2001: unresolved external symbol _setsockopt@20
            stdsoap2.obj : error LNK2001: unresolved external symbol _socket@12
            stdsoap2.obj : error LNK2001: unresolved external symbol _WSAStartup@8
            stdsoap2.obj : error LNK2001: unresolved external symbol _listen@8
            stdsoap2.obj : error LNK2001: unresolved external symbol _bind@12
            stdsoap2.obj : error LNK2001: unresolved external symbol _htonl@4
            stdsoap2.obj : error LNK2001: unresolved external symbol ___WSAFDIsSet@8
            stdsoap2.obj : error LNK2001: unresolved external symbol _accept@12
            stdsoap2.obj : error LNK2001: unresolved external symbol _ntohs@4
            stdsoap2.obj : error LNK2001: unresolved external symbol _ntohl@4
            stdsoap2.obj : error LNK2001: unresolved external symbol _closesocket@4
            stdsoap2.obj : error LNK2001: unresolved external symbol _shutdown@8

            這是怎么回事啊?
            我只在工程里添加了add.h,soapC.cpp,soapClient.cpp,soapH.h,soapServer.cpp,soapStub.h,stdsoap2.cpp,stdsoap2.h這些文件
            該怎么解決呢?  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2008-12-19 16:38 kerry

            上個問題我解決了 但是我運行是 cmd 卻出現
            usage: F:\KERRY\DATA\VC\WEBSERIVCE\Sample2\Debug\Sample2.exe <server_port>

            F:\KERRY\DATA\VC\WEBSERIVCE\Sample2 是我工程目錄 這個怎么解決啊?  回復  更多評論   

            # re: gsoap使用心得! 2008-12-24 10:51 spyy26224574

            @kerry
            請問Kerry你是怎么解決未定義問題的?分享一下可以嗎?  回復  更多評論   

            # re: gsoap使用心得! 2008-12-24 18:20 浪跡天涯

            @spyy26224574
            include winsock2.h 以及lib  回復  更多評論   

            # re: gsoap使用心得! 2009-04-06 02:10

            能否給各支持SSL的例子
            我調用web service始終不能返回正確值,我的web service是HTTPS的。
              回復  更多評論   

            # re: gsoap使用心得![未登錄] 2009-04-08 13:22 浪跡天涯

            @張
            gsoap guide文檔上有openssl的例子,你可以參考參考。  回復  更多評論   

            # re: gsoap使用心得! 2009-05-04 11:43 木木

            我在編譯的過程中發現,
            d:\my documents\visual studio 2008\projects\ltttt\ltttt\mywebservice.h(44) : fatal error C1083: 無法打開類型庫文件:“d:\my documents\visual studio 2008\projects\ltttt\ltttt\stlvector.h”: 加載類型庫/DLL 時出錯。

            mywebservice.h就是根據.wsdl得到那個頭文件。我已經將stlvector.h文件添加到當前工程了。  回復  更多評論   

            # re: gsoap使用心得! 2009-05-06 14:35 學習男

            樓主,能留個QQ交流下嗎?  回復  更多評論   

            # re: gsoap使用心得! 2009-05-07 10:22 浪跡天涯

            很少用QQ,你可以加我msn,謝謝  回復  更多評論   

            # re: gsoap使用心得! 2009-06-01 13:07 rootpang

            樓主,你的msn是多少??我遇到一個問題想和你交流一下,就是gsoap使用c++ namespace方面的問題。我不用命名空間時,可以編譯,當在soapcpp2 -n add.h時編譯不過了!!!!  回復  更多評論   

            # re: gsoap使用心得! 2009-06-01 17:20 學習

            找不到add.nsmap,怎么辦啊,沒有生成這個文件啊  回復  更多評論   

            # re: gsoap使用心得! 2009-06-01 18:37 學習

            很汗,add.h文件中,我如果用ns__,就會產生一個warming,然后就油add.nsmap文件生成,如果改成ns_,就沒有warming了,但add.nsmap文件就不會生成了,百思不得其解  回復  更多評論   

            # re: gsoap使用心得! 2009-06-23 18:12 風火冰

            oapServer.obj : error LNK2001: unresolved external symbol "int __cdecl ns1__magic(struct soap *,int,class matrix * &)" (?ns1__magic@@YAHPAUsoap@@HAAPAVmatrix@@@Z)
            Debug/soapWeb.exe : fatal error LNK1120: 1 unresolved externals  回復  更多評論   

            # re: gsoap使用心得! 2009-07-08 09:56 過客

            請問除了可以用C/C++開發webservice外,使用gsoap還有哪些優點,比如效率上,比起.net開發的如何  回復  更多評論   

            # re: gsoap使用心得! 2009-07-19 21:42 過客

            我在MFC工程中調用,初始化struct soap ServerSoap
            soap_init(&ServerSoap);

            刪除soap_destroy(&ServerSoap);
            soap_end(&ServerSoap);
            soap_done(&ServerSoap);

            會出現內存泄漏的問題,有沒有人知道如何解決呢  回復  更多評論   

            # re: gsoap使用心得! 2009-10-01 03:01 laimi

            沒用過,先看看效果  回復  更多評論   

            # re: gsoap使用心得! 2010-01-14 10:24 xiaohei

            我用VC6.0 建立的工程,但編譯出現這個,
            fatal error C1083: Cannot open include file: 'stdsoap2.h': No such file or directory
            就是我的工程目錄中沒有'stdsoap2.h','stdsoap2.cpp'文件,怎么辦?
              回復  更多評論   

            # re: gsoap使用心得! 2010-01-14 10:41 浪跡天涯

            找到這兩個文件添加入工程即可。  回復  更多評論   

            # re: gsoap使用心得! 2010-01-14 17:23 xiaohei

            謝謝樓主。現在出現別外一個問題:我在C#的添加web引用的URL中輸入http://localhost:4567/add?wsdl,但總是得到HTTP GET method not implemented的錯誤,應該怎么辦?  回復  更多評論   

            # re: gsoap使用心得! 2010-01-14 17:25 xiaohei

            我是依照你上面的方法建立的服務。。。。  回復  更多評論   

            # re: gsoap使用心得! 2010-01-14 17:38 浪跡天涯

            這個url過來的請求時http_get,你必須自己實現http_get方法,返回wsdl的真正內容即可。  回復  更多評論   

            # re: gsoap使用心得! 2010-01-15 10:35 xiaohei

            http_get里面應該怎么寫,返回值是什么?第一個例子,怎么才能讓C#或者java或者C++的ISoapSerializerPtr 寫的客戶端去調用呢?
            請樓主賜教....  回復  更多評論   

            # re: gsoap使用心得! 2010-01-15 11:56 xiaohei

            我用
            int http_get(struct soap *soap)
            {
            FILE* fd = fopen("add.wsdl", "rb"); // open WSDL file to copy
            if (!fd)
            return 404; // return HTTP not found error
            soap->http_content = "text/xml"; // HTTP header with text/xml content
            soap_response(soap, SOAP_FILE);
            for (;;)
            {
            int r = fread(soap->tmpbuf, 1, sizeof(soap->tmpbuf), fd);
            if (!r)
            break;
            if (soap_send_raw(soap, soap->tmpbuf, r))
            break; // can't send, but little we can do about that
            }

            fclose(fd);
            soap_end_send(soap);
            return SOAP_OK;
            }
            將整個文檔的內容發過,在瀏覽器可以看到整個配置文件的內容,但在C#中添加了引用,調用Add接口失敗。  回復  更多評論   

            # re: gsoap使用心得! 2010-03-22 11:23 淘寶返利店

            C 我永遠的痛  回復  更多評論   

            # re: gsoap使用心得! 2011-03-08 16:58 andywangcn

            @風云
            無法解析的外部符號 "int __cdecl ns__add(struct soap *,int,int,int *)" (?ns__add@@YAHPAUsoap@@HHPAH@Z),該符號在函數 "int __cdecl soap_serve_ns__add(struct soap *)" (?soap_serve_ns__add@@YAHPAUsoap@@@Z) 中被引用
            請問這個問題該怎么解決啊?
            我的郵箱andywangcn@163.com,謝謝啦  回復  更多評論   

            # re: gsoap使用心得! 2011-04-28 11:57 asdfsadas

            @kerry
            添加win32.lib  回復  更多評論   

            # re: gsoap使用心得! 2011-05-10 19:15 wwb

            @xiaohei
            我也同樣的問題,不知道哪位大俠解決過此類問題  回復  更多評論   

            # re: gsoap使用心得! 2011-05-16 11:48 Chad

            編譯錯誤
            fatal error C1083: Cannot open type library file: 'e:\download\gsoap_2.8.1\gsoap-2.8\gsoap\import\stlvector.h': Error loading type library/DLL.
            這個問題是什么原因造成的?有哪位大俠遇到過?  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2011-07-05 15:51 young

            編譯通過,連接時會同現這些,這是什么原因啊!
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_getheader
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_faultcode
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_faultsubcode
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_faultstring
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_putfault
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_putheader
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_serializefault
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_serializeheader
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_getfault
            stdsoap2.obj : error LNK2001: unresolved external symbol _soap_faultdetail
            Debug/soap_send.exe : fatal error LNK1120: 10 unresolved externals  回復  更多評論   

            # re: gsoap使用心得! 2011-07-20 00:46 MyChip

            好文  回復  更多評論   

            # re: gsoap使用心得! 2011-08-26 12:22 追逐的腳步|ImChaser

            拜訪,學習  回復  更多評論   

            # re: wsdl發布問題 2012-02-08 14:39 lxwei

            我使用http_get方法能夠在http://localhost:8080/hello?wsdl上顯示具體的wsdl,但是使用c#或javascript的客戶端引用上述網址卻不能調用gsoap服務器的方法,請問樓主有沒有解決方法?萬分感謝!  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2012-02-08 15:03 浪跡天涯

            @lxwei
            你用c#寫一個相同的服務,然后比較兩個wsdl文件差異。我覺得這兩個wsdl是有差異的,才導致調用失敗。用http_get返回c#服務生成的wsdl試試。  回復  更多評論   

            # re: gsoap使用心得! 2012-02-20 10:44 man

            樓主,您好,我是初學者,想請教下若是網站上沒有wsdl文檔或xsd文件時,該如何利用gsoap調用webservice服務呢?  回復  更多評論   

            # re: gsoap使用心得! 2012-08-01 21:51

            我想用c++調用java寫好的webservice該怎樣用?
            現在我是直接添加WEB引用,會出現如下警告與錯誤:
            警告 1 warning LNK4227: 元數據操作警告(00131189): 重復方法中的參數信息不一致(方法: getMessage;類型: WebTest001.getTaskAppCompletedEventArgs): (0x0800003a)。 AssemblyInfo.obj
            錯誤 5 error LNK2022: 元數據操作失敗(80131195): 自定義屬性不一致: (0x0c000043)。 AssemblyInfo.obj

            這個該怎么解決?  回復  更多評論   

            # re: gsoap使用心得! 2012-08-07 09:15 zyg

            @kerry
            少帶參數了,命令行下應該輸入Sample2.exe 4567   回復  更多評論   

            # re: gsoap使用心得![未登錄] 2012-09-26 17:55 jacky

            我想把server端的程序變成可以同時支持ipv4和ipv6, 請問怎么做?  回復  更多評論   

            # re: gsoap使用心得! 2012-10-09 17:21 sniff

            @lxwei
            我用gsoap做客戶端,程序沒問題,把服務器端運行起來,在ie輸入http://localhost:82之類的,會展示整個wsdl,但是這個wsdl內部有add,sub這些接口,怎么調用啊

            在ie里面輸入時,服務端,自己已經實現了http_get,但是獲取的是整個wsdl文件,我想調用他里面的一個,比如add接口  回復  更多評論   

            # re: gsoap使用心得! 2012-11-12 16:33 xh

            第二步,把add.h和soapcpp2.exe放在同一個目錄下 怎么不能生成文件 能詳細一點嗎  回復  更多評論   

            # re: gsoap使用心得! 2012-11-12 16:34 xh

            可以把soapcpp2.exe拷貝到一add.h目錄下 什么意思 有解釋的嗎?
              回復  更多評論   

            # re: gsoap使用心得! 2012-12-27 15:11 zhujinhu

            我調用webservice傳入的參數怎么都是空?
            struct soap clientSOAP;

            string s1 = "zhujinhu";
            string s2 = "";
            soap_init(&clientSOAP);
            _tempuri__HelloWorld hello;
            hello.name=&s1;
            _tempuri__HelloWorldResponse helloResponse;
            if(soap_call___tempuri__HelloWorld(&clientSOAP, NULL, NULL, &hello, &helloResponse) == SOAP_OK)
            {
            cout<<helloResponse.HelloWorldResult->c_str()<<endl;
            }
            else
            {
            printf("Error\n");
            }

            soap_destroy(&clientSOAP);

            soap_end(&clientSOAP);

            soap_done(&clientSOAP);

            return 0;  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2013-01-16 15:49 浪跡天涯

            請問下我客戶端調用服務端方法返回-1是為什么???
            printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
            獲取到的錯誤信息都為Null  回復  更多評論   

            # re: gsoap使用心得! 2013-01-16 17:32 luguo

            樓主我想請問你一下,我現在需要調用2個WebServers,我照你的方法生成了2個客戶端。2個客戶端分開編譯正常運行。但是我想把2個客戶端合為一個客戶端,編譯的時候就報函數重復定義了,有沒有什么解決的辦法?  回復  更多評論   

            # re: gsoap使用心得! 2013-02-02 16:32 zhao

            @學習
            你沒有用cmd執行soapcpp2.exe add.h
            這個日志是一個真正能完整運行的示例。  回復  更多評論   

            # re: gsoap使用心得! 2013-02-02 16:33 zhao

            @xh
            就是手動把這個exe文件拷到add.h所在目錄啊,這樣就可以直接“用cmd執行soapcpp2.exe add.h”生成所需要的其它文件了。  回復  更多評論   

            # re: gsoap使用心得! 2013-02-18 11:36 quan

            樓主我想請問下為什么我用cmd執行soapcpp2.exe add.h一個文件都沒有生成啊,兩個文件已經放在同一個目錄下面了,cmd命令行里面提示save那些文件了,可是為什么文件都沒生成呢?  回復  更多評論   

            # re: gsoap使用心得! 2013-02-18 11:39 quan

            能給個qq什么的聯系方式嗎?有問題請教,這上面好不方便啊
              回復  更多評論   

            # re: gsoap使用心得! 2013-02-27 15:23 gsoap

            連接出現一下錯誤
            1>Linking...
            1>soap.obj : error LNK2019: unresolved external symbol "int __cdecl soap_serve(struct soap *)" (?soap_serve@@YAHPAUsoap@@@Z) referenced in function _main
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultcode referenced in function _http_response
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_getheader referenced in function _soap_recv_header
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultsubcode referenced in function _soap_set_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultstring referenced in function _soap_set_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_putfault referenced in function _soap_send_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_putheader referenced in function _soap_send_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_serializefault referenced in function _soap_send_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_serializeheader referenced in function _soap_send_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_getfault referenced in function _soap_recv_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultdetail referenced in function _soap_set_error
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_check_faultdetail referenced in function _soap_print_fault
            1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_check_faultsubcode referenced in function _soap_print_fault  回復  更多評論   

            # re: gsoap使用心得! 2013-03-12 15:08 nemo

            SSL_ERROR_SSL
            error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

            樓主,這樣的錯誤時什么意思啊  回復  更多評論   

            # re: gsoap使用心得! 2013-06-06 14:22 額c++

            請問樓主,我的webserver.cpp運行后若有client請求,則能正確返回相加結果,若無client請求,過大概5秒他就自動關閉了,請問是怎么回事呢  回復  更多評論   

            # re: gsoap使用心得! 2013-07-31 09:32 晨星

            POST / HTTP/1.1
            Host: 16.2.1.123:4567
            User-Agent: gSOAP/2.8
            Content-Type: text/xml; charset=utf-8
            Content-Length: 459
            Connection: close
            SOAPAction: ""
            這樣的信息可以在程序里什么地方控制生成的?  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2013-09-25 10:28 123

            夸平臺?

            怎么 夸??? 發嘉獎令?  回復  更多評論   

            # re: gsoap使用心得! 2013-11-08 17:45 Homepage

            win32.lib 怎么得到? @asdfsadas
              回復  更多評論   

            # re: gsoap使用心得! 2013-11-08 19:29 Homepage

            @andywangcn
            解決了嗎?
            homepage2010@qq.com  回復  更多評論   

            # re: gsoap使用心得! 2014-03-31 23:24 fuck gsoap

            'stlvector.h': 加載類型庫/DLL 時出錯。  回復  更多評論   

            # re: gsoap使用心得! 2014-04-04 09:52 zss123

            如何把soapcpp2.exe拷貝到一add.h目錄下并執行?  回復  更多評論   

            # re: gsoap使用心得! 2014-05-07 09:30 迷茫的gsoap

            @風火冰
            請問你問題怎么解決的?我也遇到相同的問題了 謝謝!  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2014-05-09 19:43 稻草人

            樓主能講下,怎么建立多個函數的web  回復  更多評論   

            # re: gsoap使用心得![未登錄] 2014-05-12 09:24 稻草人

            如何利用gsoap來創建一個客戶端,去控制兩個不在同一臺主機上的服務端程序  回復  更多評論   

            # re: gsoap使用心得! 2014-06-24 10:13 風清

            編譯客戶端的時候出現這樣的錯誤提示是怎么回事啊?error C3861: “soap_call_ns__add”: 找不到標識符  回復  更多評論   

            # re: gsoap使用心得! 2014-06-24 15:40 風清

            樓主我想做圖片處理得,能否指導一下呢  回復  更多評論   

            # re: gsoap使用心得! 2014-07-02 10:47 wusansan

            很不錯,正在學習中!  回復  更多評論   

            # re: gsoap使用心得! 2014-07-14 13:53 秦力

            添加http_get方法后,導致客戶端調用add方法失敗的原因是,http_get中調用soap_end_send(soap)方法,導致調用add方法時,重復調用soap_end_send(soap);方法出錯。我把http_get方法添加在webserver.cpp中,出現上述情況,目前還沒想到把這個http_get方法添加到哪里,這個問題你解決了嗎? @xiaohei  回復  更多評論   

            # re: gsoap使用心得! 2014-07-14 14:09 秦力

            找到解決辦法了,在soap_init(&soap); 之后加 soap.fget = http_get; 指定遠程沒有調用webservice方法時返回的內容即可@xiaohei  回復  更多評論   

            # re: gsoap使用心得! 2014-07-22 09:23 LC湊熱鬧

            利用gsoap開發的Webservice可以用網頁的形式呈現給用戶使用嗎?  回復  更多評論   

            # re: gsoap使用心得! 2015-05-05 18:47 zhtao2015

            @andywangcn
            請問這種無法解析外部符號的問題你們是怎么解決的?
            error LNK2019: 無法解析的外部符號 ___tan__ModifyAnalyticsModules,該符號在函數 _soap_serve___tan__ModifyAnalyticsModules 中被引用;


            我的郵箱是zhtao2012@163.com

            謝謝了!  回復  更多評論   

            # re: gsoap使用心得! 2015-05-27 10:40 黑毛

            @zhtao2015

            服務端:添加文件(soapC.cpp soapH.h soapServer.cpp soapStub.h stdsoap2.cpp stdsoap2.h(stl support)這些文件)
            客戶端:添加文件(soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapClient.cpp、stdsoap2.cpp、add.nsmap)

            提示缺少哪個文件,添加哪個,即可。  回復  更多評論   

            # re: gsoap使用心得! 2015-09-14 15:53 潘永紅

            @kerry
            你那個鏈接錯誤是怎么解決的呢  回復  更多評論   

            # re: gsoap使用心得! 2016-04-26 15:44 無名氏

            _SendRequest start: serverUrl.c_str() http://nnzz.hx2000.com.cn:8822/Aeyeser.asmx
            MainServlet.invokews faild: 無法識別請求元素 <invokews xmlns='returnid 111111: -199
            doCommunicateLogin_CS iResult: 1 樓主,出現這個問題是什么原因呢  
            回復  更多評論   

            <2008年12月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            導航

            統計

            常用鏈接

            留言簿(22)

            隨筆分類(30)

            隨筆檔案(29)

            文章分類

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            四虎影视久久久免费观看| 一级女性全黄久久生活片免费| 久久久久人妻一区二区三区| 国产精品久久久久久久久软件| 亚洲国产精品一区二区久久hs| 久久久国产精品亚洲一区| 久久亚洲精品视频| 久久只有这里有精品4| 久久久久久无码Av成人影院| 久久精品国产亚洲AV影院| 一级a性色生活片久久无 | 久久精品国产亚洲αv忘忧草| 亚洲婷婷国产精品电影人久久| 香蕉久久永久视频| 奇米影视7777久久精品人人爽| 久久久久久久精品成人热色戒| 久久久久久伊人高潮影院| 久久久久AV综合网成人| 久久国产精品无码一区二区三区| 国产麻豆精品久久一二三| 性高湖久久久久久久久AAAAA| 麻豆国内精品久久久久久| 狠狠色丁香婷婷久久综合不卡| 人妻无码久久精品| 久久精品国产亚洲AV影院| 日产精品久久久一区二区| 性做久久久久久久久老女人| 色综合久久夜色精品国产| 伊人久久无码中文字幕| 亚洲精品综合久久| 日韩精品久久久久久久电影蜜臀 | 久久久久久曰本AV免费免费| 久久婷婷五月综合色高清| 青青国产成人久久91网| 久久精品免费大片国产大片| 久久精品一区二区三区不卡| 91久久精品无码一区二区毛片| 无码日韩人妻精品久久蜜桃| 欧美久久综合性欧美| 国产精品久久久久久久app| av无码久久久久久不卡网站|