Server Side
The following is placed in the httpdthread.tcl:
package require WS::Server package require WS::Utils
The following is placed in the a file in the custom directory:
##
## Define the service
##
::WS::Server::Service \
-service wsExamples \
-description {Tcl Example Web Services} \
-host $::Config(host):$::Config(port)
##
## Define any special types
##
::WS::Utils::ServiceTypeDef Server wsExamples echoReply {
echoBack {type string}
echoTS {type dateTime}
}
##
## Define the operations available
##
::WS::Server::ServiceProc \
wsExamples \
{SimpleEcho {type string comment {Requested Echo}}} \
{
TestString {type string comment {The text to echo back}}
} \
{Echo a string back} {
return list SimpleEchoResult $TestString }
::WS::Server::ServiceProc \
wsExamples \
{ComplexEcho {type echoReply comment {Requested Echo -- text and timestamp}}} \
{
TestString {type string comment {The text to echo back}}
} \
{Echo a string and a timestamp back} {
set timeStamp clock format [clock seconds -format {%Y-%m-%dT%H:%M:%SZ} -gmt yes] return list ComplexEchoResult [list echoBack $TestString echoTS $timeStamp ] }
Client Side
package require WS::Client
## ## Get Definition of the offered services ## ::WS::Client::GetAndParseWsdl http://localhost:8015/service/wsExamples/wsdl
set testString "This is a test" set inputs list TestString $testString
## ## Call synchronously ## puts stdout "Calling SimpleEcho via DoCalls!" set results :WS::Client::DoCall wsExamples SimpleEcho $inputs puts stdout "\t Received: {$results}"
puts stdout "Calling ComplexEcho via DoCalls!" set results :WS::Client::DoCall wsExamples ComplexEcho $inputs puts stdout "\t Received: {$results}"
## ## Generate stubs and use them for the calls ## ::WS::Client::CreateStubs wsExamples puts stdout "Calling SimpleEcho via Stubs!" set results :wsExamples::SimpleEcho $testString puts stdout "\t Received: {$results}"
puts stdout "Calling ComplexEcho via Stubs!" set results :wsExamples::ComplexEcho $testString puts stdout "\t Received: {$results}"
##
## Call asynchronously
##
proc success {service operation result} {
global waitVar
puts stdout "A call to $operation of $service was successful and returned $result"
set waitVar 1
}
proc hadError {service operation errorCode errorInfo} {
global waitVar
puts stdout "A call to $operation of $service was failed with {$errorCode} {$errorInfo}"
set waitVar 1
}
set waitVar 0
puts stdout "Calling SimpleEcho via DoAsyncCall!"
::WS::Client::DoCall wsExamples SimpleEcho $inputs \
list success wsExamples SimpleEcho \
list hadError wsExamples SimpleEcho
vwait waitVar
puts stdout "Calling ComplexEcho via DoAsyncCall!"
::WS::Client::DoCall wsExamples ComplexEcho $inputs \
list success wsExamples SimpleEcho \
list hadError wsExamples SimpleEcho
vwait waitVar
exit