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 wsMathExample \
-description {Tcl Web Services Math Example} \
-host $::Config(host):$::Config(port)
##
## Define any special types
##
::WS::Utils::ServiceTypeDef Server wsMathExample Term {
`coef {type float}
powerTerms {type PowerTerm()}
}
::WS::Utils::ServiceTypeDef Server wsMathExample PowerTerm {
var {type string}
exponet {type float}
}
::WS::Utils::ServiceTypeDef Server wsMathExample Variables {
var {type string}
value {type float}
}
##
## Define the operations available
##
::WS::Server::ServiceProc \
wsMathExample \
{EvaluatePolynomial {type float comment {Result of evaluating a polynomial}}} \
{
varList {type Variables() comment {The variables to be substitued into the polynomial}}
polynomial {type Term() comment {The polynomial}}
} \
{Evaluate a polynomial} {
set equation {0 }
foreach varDict $varList {
set var [dict get $varDict var]
set val [dict get $varDict value]
set vars($var) $val
}
foreach term $polynomial {
if {[dict exists $term coef]} {
set coef [dict get $term coef]
} else {
set coef 1
}
append equation "+ ($coef"
foreach pow [dict get $term powerTerms] {
if {[dict exists $pow exponet]} {
set exp [dict get $pow exponet]
} else {
set exp 1
}
append equation [format { * pow($vars(%s),%s} [dict get $pow var] $exp]
}
append equation ")"
}
set result [expr $equation]
return [list SimpleEchoResult $result]
}
package require WS::Client
##
## Get Definition of the offered services
##
::WS::Client::GetAndParseWsdl http://localhost:8015/service/wsMathExamples/wsdl
dict set term var X
dict set term value 2.0
dict lappend varList $term
dict set term var Y
dict set term value 3.0
dict lappend varList $term
set term {}
set powerTerm {}
dict set powerTerm coef 2.0
dict set term var X
dict set term pow 2.0
dict lappend terms $term
dict set term var Y
dict set term pow 3.0
dict lappend terms $term
dict set powerTerm powerTerms $terms
dict set powerTerm coef -2.0
dict set term var X
dict set term pow 3.0
dict lappend terms $term
dict set term var Y
dict set term pow 2.0
dict lappend terms $term
dict set powerTerm powerTerms $terms
dict lappend polynomial powerTerms $powerTerm
dict set input [list varList $varList polynomial $polynomial]
##
## Call service
##
puts stdout "Calling EvaluatePolynomial wiht {$input}"
set resultsDict [::WS::Client::DoCall wsMathExample EvaluatePolynomial $input]
puts stdout "Results are {$resultsDict}"