GSOAP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдирд╛

рдЖрдк рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?


рдХрднреА-рдХрднреА рдкреБрд░рд╛рдиреЗ рдФрд░ рдЕрдЪреНрдЫреЗ C ++ рдореЗрдВ SOAP рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдмреЗрд╢рдХ, рд╕рдЪреНрдЪреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░реЗрдореА рдЕрдкрдиреЗ рджрдо рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдФрд░ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдЬ рдореИрдВ рдЕрдкрдиреЗ C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ gSOAP рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ (рдмрд╕ рдереЛрдбрд╝рд╛ рд╕рд╛) рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЙрдкрдХрд░рдг


рдореИрдВ рдЕрдкрдиреА рдХрд╣рд╛рдиреА рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 SP1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рддреБрд░рдВрдд рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдБрдЧрд╛ рдХрд┐ gSOAP рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ [http://www.cs.fsu.edu/~engelen/soap.html] (рдореИрдВрдиреЗ v2.8.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛)ред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХреГрддрд┐ рд╕реЗрд╡рд╛ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдореИрдВ рдЭреВрда рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ) рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЫрджреНрдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд╣реИ:
void MakePayment([IN] int qty, [OUT]int& errorCode, [OUT]string& message)

рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!


GSOAP рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╣реИред рдЕрдВрджрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА, рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рд╕рдорд╛рди "++"ред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ WSDL рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд╕рд╛рде рднреА рд╕реНрдЯреАрдо рдмрд╛рде рдирд╣реАрдВ рд▓реЗрдирд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ)ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ, рдХреНрдпреЛрдВрдХрд┐ gSOAP рд╡рд┐рддрд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ (рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░) рдЖрдкрдХреЛ рдУрдкрдирд╕реЛрд░реНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреЛ рдЦреБрд╢реА рджреЗрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рднреА рдХрд░рдирд╛ рд╣реИ ...)ред

рддреЛ, рд╣рдо gsoap \ bin \ win32 \ directory рдореЗрдВ рдЪрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рджреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВред рд╕рд╛рдмреБрдирдХреИрдк 2.exe рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕рд░реНрд╡рд░ рдХреЛрдб, рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЙрдХреНрд╕реА (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) рдореЗрдВ рд╕реА-рд▓рд╛рдЗрдХ рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд░рдг рднрд╛рд╖рд╛ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдбрдмреНрд▓реНрдпреВрдПрд╕рдбреАрдПрд▓ рд╡рд┐рд╡рд░рдг рдФрд░ рд╕рд╛рдмреБрди рдЕрдиреБрд░реЛрдз-рдЙрддреНрддрд░-рд▓рд┐рдлрд╛рдлреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред рдЖрд╕-рдкрд╛рд╕ рдЭреВрда wsdl2h.exe рд╣реИ - рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЖрдкрдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рдбрдмреНрд▓реВрдПрд╕рдбреАрдПрд▓ рд╡рд┐рд╡рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╕реА-рд▓рд╛рдЗрдХ рднрд╛рд╖рд╛ рдореЗрдВ рд╕рд╛рдмреБрдирдХреИрдк 2.exe рдореЗрдВ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред рд╣рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ WSDL рдкрд░ рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИред

-рд╣реЗрд▓реНрдк рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдиреБрдЕрд▓ рдкреЗрдЬ рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдХреБрдЫ рд╣рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реВрдЯ рдХрд░реЗрдЧрд╛, рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдорджрдж рд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред

рд╕рд░реНрд╡рд░


рдЖрдЗрдП рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдЪ рдХреЗ рд╕рд╛рдеред рд╣рдо рдлрд╝рд╛рдЗрд▓ рднреБрдЧрддрд╛рди рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:
 //gsoap ns service name: paymentssl //gsoap ns service style: rpc //gsoap ns service encoding: encoded //gsoap ns service namespace: urn:paymentssl //gsoap ns service location: http://localhost:9999 //gsoap ns service method-action: MakePayment urn:MakePayment typedef int xsd__int; typedef char* xsd__string; enum t__status // remote status: { STATE_OK, // ok STATE_FAIL // fail to process }; class t__result { public: enum t__status errCode; xsd__string message; }; int ns__MakePayment(xsd__int qty, t__result* result); 


рд╕реАрдзреЗ SOAP рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ "рдореИрдЬрд┐рдХ рдХрдореЗрдВрдЯ" (рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рд╡рд╣рд╛рдБ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╡реЗ рдорд╛рдирдХ SOAP рдХреА рд▓рдЧрднрдЧ рдПрдХ рдкреНрд░рддрд┐ рд╣реИрдВред рдЬрдм рддрдХ рд╡рд┐рдзрд┐-рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╕рдордЭрд╛рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЙрдЪрд┐рдд рд╕реНрдерд┐рд░реАрдХрд░рдгред

рд╣рдо soapcpp2.exe -2 -i -e paymentservice.h рд▓реЙрдиреНрдЪ soapcpp2.exe -2 -i -e paymentservice.h
рдореИрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдордЭрд╛рдКрдВрдЧрд╛:


рдкрд░рд┐рдгрд╛рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ:


рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдореА WSDL рд╡рд┐рд╡рд░рдг рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


рдпрд╣ рд╕рд░реНрд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ (рд╕рд░реНрд╡рд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрд╕рдПрд╕рдПрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИ)ред

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рд░реНрд╡рд░


рдПрдХ рдЦрд╛рд▓реА рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ Precompiled Headers рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рд╣рдо рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:


GSOAP рдХрд░реНрдиреЗрд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ рднреА рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ: stdsoap2.cpp рдФрд░ stdsoap2.h ред

рдореИрдВрдиреЗ рддреБрд░рдВрдд PaymentServiceImpl рд╡рд░реНрдЧ рдЬреЛрдбрд╝рд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред
рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
 paymentsslService::MakePayment(int qty, t__result *result) 

рдпрд╣ рдЖрднрд╛рд╕реА рд╣реИ (рд▓реЗрдХрд┐рди рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЖрднрд╛рд╕реА рдирд╣реАрдВ рд╣реИ), рдФрд░ рдореЗрд░рд╛ PaymentServiceImpl рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди PaymentServiceImpl paymentsslService рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд PaymentServiceImpl рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдЕрдзрд┐рднрд╛рд░ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯрдм рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣реАрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 // //implementation for generated code always return FAIL. //This method will be override in PaymentServiceImpl class // int paymentsslService::MakePayment(int qty, t__result *result) { return SOAP_ERR; } 

рд╕реНрдерд┐рд░ SOAP_ERR рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ stdsoap2.h рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдо PaymentServiceImpl рд╡рд░реНрдЧ рдореЗрдВ рдЕрддрд┐рднрд╛рд░рд┐рдд MakePayment рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рднреА рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдпрд╣ рд╕реЗрд╡рд╛ рдХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХреЛрдб рдФрд░ рдкрд╛рда рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рд▓реМрдЯрдиреЗ рдХрд╛ рддрд░реНрдХ рджреЗрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реНрдХ рд╣реЛрдВрдЧреЗ:
1) рдЕрдЧрд░ рдорд╛рддреНрд░рд╛ <0 рд╣реИ рддреЛ рд╣рдо рдПрдХ SOAP рдЕрдкрд╡рд╛рдж (SOAP FAULT) рдлреЗрдВрдХрддреЗ рд╣реИрдВ
2) рдЕрдЧрд░ рдорд╛рддреНрд░рд╛> 100 рд╣реИ рддреЛ рд╣рдо "рддреНрд░реБрдЯрд┐" рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ
3) рдЕрдиреНрдпрдерд╛, рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░реЗрдВ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛

рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
 // PaymentServiceImpl.h #pragma once #include "Autogenerated/soappaymentsslService.h" class PaymentServiceImpl : public paymentsslService { public: virtual int MakePayment(int qty, t__result *result); }; // PaymentServiceImpl.cpp #include "PaymentServiceImpl.h" #include "Autogenerated/paymentssl.nsmap" /*virtual*/ int PaymentServiceImpl::MakePayment(int qty, t__result *result) { this->mode = this->mode | SOAP_C_UTFSTRING; if(qty<0) { this->soap_senderfault("error!", "<error xmlns=\"http://tempuri.org/\">The input parameter must be positive</error>"); return SOAP_CLI_FAULT; } if(qty>100){ result->errCode = STATE_FAIL; char err[] = "error (2)!"; int len=strlen(err); result->message = reinterpret_cast<char*>(soap_malloc(this, len+1)); strcpy_s(result->message, len+1, err); result->message[len] = '\0'; } return SOAP_OK; } 


рдпрд╣ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рднреА рджреЗрддрд╛ рд╣реИ рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╣рдо рд╕рднреА рд╡реНрдпрд░реНрде рдЧрдПред
рдореБрдЦреНрдп рджрд░реНрдЬ рдХрд░реЗрдВ:
 #include "PaymentServiceImpl.h" int _tmain(int argc, _TCHAR* argv[]) { const int SERVICE_PORT = 9999; std::auto_ptr<PaymentServiceImpl> srv (new PaymentServiceImpl()); if (srv->run(SERVICE_PORT)) { srv->soap_stream_fault(std::cerr); exit(-1); } return 0; } 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░реАрдмреЙрдХреНрд╕рд░ рдбреАрдмрдЧ рдирд┐рд░реНрджреЗрд╢ (рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗрдЯ _DEBUG) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рд╣рдо рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рддреЗ рд╣реИрдВ


рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд▓реНрджреА рд╕реЗ рд╕реА # рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реА ++ рдореЗрдВ рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдПрдХрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╕реЗрдорд┐рд▓рд░ рдЯреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд░ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА # рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП SOAP рдЦреБрдж рдПрдХ рдмрд╛рд░ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдерд╛))ред

рдПрдХ рдирдпрд╛ C # рдХрдВрд╕реЛрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕рдореЗрдВ рд╕реЗрд╡рд╛ рд╡рд╛рдкрд╕реА рдЬреЛрдбрд╝реЗрдВред рд╣рдо рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ paymentssl.wsdl рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрде рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВрдЧреЗред


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдореЗрдВ, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдХрд┐ рд╣рдо .Net4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ .NET4 рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХред

рдпрд╣рд╛рдБ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рд╣реИ:
 var proxy = new PaymentService.paymentsslPortTypeClient(); string msg; var errCode = proxy.MakePayment(out msg, 10); 

//
// рд╣рд╛рдБ, рд╕реНрдЯреВрдбрд┐рдпреЛ (рдпрд╛ рдмрд▓реНрдХрд┐ svcutil рдЙрдкрдпреЛрдЧрд┐рддрд╛) рдХреА рдПрдХ рдЕрдЬреАрдм рд╕рдордЭ рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП,
// рд▓реЗрдХрд┐рди рд╡рд┐рд╖рдп "рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдФрд░ gSOAP рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд" рдЗрд╕ рдкрд░рд┐рдЪрдп рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ
//


рдЖрдкрдХреЛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдРрдк рдХреЛ рднреА рдареАрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
 <configuration> <system.serviceModel> <bindings> <customBinding> <binding name="paymentssl"> <textMessageEncoding messageVersion="Soap12" /> <httpTransport/> </binding> </customBinding> </bindings> <client> <endpoint address="http://localhost:9999" binding="customBinding" bindingConfiguration="paymentssl" contract="PaymentService.paymentsslPortType" name="paymentssl"/> </client> </system.serviceModel> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration> 

Voila, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ рдЬреЛ SOAP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ (рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЬреЛ рдореИрдВрдиреЗ рдирд╣реАрдВ рдмрддрд╛рдпрд╛




рдпрджрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ (рд╕рдордп рдХреИрд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛрдЧрд╛)ред
рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ SOAP рдХреЗ рд╕рд╛рде рд╢реБрднрдХрд╛рдордирд╛рдПрдВред

Source: https://habr.com/ru/post/In121853/


All Articles