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