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] ]
}
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