Hey
Tim,
I'm very interested in
what you said here. I'm not exactly sure how your client application would
seamlessly handle a web service API change. It seems to me that ( at least
in the majority of cases ) any WSDL change is going to cause changes in the
client code that invokes the web service so you're looking at a client recompile
regardless. I realize there may be certain cases where the client could be
handling a result purely dynamically in which case you could avoid a recompile
but I have to think that's the exception rather than the rule. Regardless, I'd
be interested in hearing how you've worked around this.
Another piece of added
value to building the WSDL into the client is that it allows you to turn off
WSDL publication in production. This is especially value if you're trying
to obfuscate your APIs to a web service on a public IP server. Outside of
the Flex world, this is a very common ( arguably the standard ) practice when
deploying web services that are not designed for broad public
consumption.
It's an interesting
design choice that Flex needs WSDL at runtime. This is definitely out of the
ordinary as it is not the case in the majority of technologies out there.
WSDL ( as was its predecessor IDL ) designed to be consumed at development time
and to to generate langauge specifc stub classes to invoke the services at
runtime. Typically WSDL and IDL are not used at runtime. The exceptions that I
know of would be DLL calls in CORBA and then of course Flex. There's
nothing saying it can't be used at runtime but most security audits that we have
deal with would call this a glaring hole.
Carson
____________________________________________
Carson
Hager
Cynergy Systems, Inc.
http://www.cynergysystems.com
Email:
[EMAIL PROTECTED]
Office:
866-CYNERGY
Mobile:
1.703.489.6466
From:
[email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Tim Hoff
Sent: Thursday, June 29, 2006 3:10
PM
To:
[email protected]
Subject: [flexcoders] Re: Embedding
WSDL?
That was my
first thought Andrew, but I couldn't find the API to
ovverride. Anyways, at
the end of the day, embedding wsdl isn't
generally a good idea. If you make
a change to a webservice
operation on the server side, you would have to
re-compile and re-
deploy every Flex application that uses it. Otherwise the
applications would break. There goes the encapsulation. The extra
second
or two needed to get the wsdl dynamically is acceptable
overhead if
webservices is the chosen RPC.
-TH
--- In [EMAIL PROTECTED]ups.com,
"Andrew Trice" <andrew.trice@...>
wrote:
>
> In Flex
1.5, I was able to preload/embed wsdl into the swf by
overriding
> the
sendAndLoad method of the native XML object...
>
>
>
> Take a look at my blog posting here to see how:
>
> https://www.cynergysystems.com/blogs/page/andrewtrice?
entry=override_nat
>
ive_object_methods_in
>
>
>
> I don't think that
this exact syntax will work in Flex 2 b/c you
can no
> longer modify
the prototype of a native object. In Flex 2, you
could
> try extending
the WebService object like this (although I have no
> guarantee that this
would work... I have not actually tried it).
Use
> the EmbededWSDL
class instead of the WebService class. You might
also
> need to
override the loadWsdl function.
>
>
>
>
package
>
> {
>
> import
mx.rpc.soap.WebService;
>
>
>
> public class
EmbededWSDL extends WebService
>
> {
>
>
>
> public function EmbededWSDL(){
>
>
>
>
this.wsdl = "MY WSDL STRING";
>
> super();
>
>
}
>
>
>
> }
>
> }
>
>
>
>
>
> Hope that helps!
>
>
-Andy
>
>
>
>
_____________________________________
>
> Andrew
Trice
>
> Cynergy Systems, Inc.
>
> http://www.cynergysystems.com
>
>
>
> Blog: http://www.cynergysystems.com/blogs/page/andrewtrice
>
> Email: andrew.trice@...
>
> Office: 866-CYNERGY
>
>
>
>
________________________________
>
> From: [EMAIL PROTECTED]ups.com
[mailto:[EMAIL PROTECTED]ups.com]
On
> Behalf Of Tim Hoff
> Sent: Thursday, June 29, 2006 4:16
AM
> To: [EMAIL PROTECTED]ups.com
>
Subject: [flexcoders] Re: Embedding WSDL?
>
>
>
>
Kelly,
>
> As Matt observed, I'm using a single AS class (Cairngorm
ServiceLocator)
> for webservice calls. It's based on Jeff Tapper's
DataManager
class:
>
> http://jeff.mxdj.com/as3datamanagerfix.htm
>
> I changed the logic to get the wsdl, when the application
loads,
to cut
> a few seconds off of the initial data call. It appears
that once
the
> wsdl is loaded, the webservice doesn't request it
again for
subsequent
> calls. If all of your calls are to the same
webservice, there
would
> only be one request for the wsdl. This would
address your client's
> concern about network traffic.
>
>
-TH
>
> Note: You don't have to use AS. The same thing can be done
with
mxml.
>
>
> --- In [EMAIL PROTECTED]ups.com,
"Kelly Birr" <kelly.fx@> wrote:
> >
> > thanks, I'll
have to somehow centralize my web services into one
> component,
>
> and find a way to mange getting the result events to the correct
place
> > depending on what the user is doing.
> >
> > - Kelly
> >
> > _____
> >
>
> From: [EMAIL PROTECTED]ups.com
[mailto:[EMAIL PROTECTED]ups.com]
>
On
> > Behalf Of Matt Chotin
> > Sent: Thursday, June 29, 2006
12:06 AM
> > To: [EMAIL PROTECTED]ups.com
>
> Subject: RE: [flexcoders] Re: Embedding WSDL?
> >
> >
> >
> > We don't have WSDL caching right now. It sounds like
your app
may call
> for
> > a strategy like a ServiceLocator
where you put the WebService in
a
> single
> > location and
refer to it from elsewhere. If you have 15
WebService
> tags
you
> > will get 15 WSDL requests even if they are for the same WSDL.
So
two
> tags,
> > less of a deal, 15, big pain. The
DataServices approach that Tim
has
> here
> > is one example
of a ServiceLocator.
> >
> >
> >
> >
Matt
> >
> >
> >
> > _____
> >
> > From: [EMAIL PROTECTED]ups.com
[mailto:[EMAIL PROTECTED]ups.com]
>
On
> > Behalf Of Tim Hoff
> > Sent: Wednesday, June 28, 2006
9:49 PM
> > To: [EMAIL PROTECTED]ups.com
>
> Subject: [flexcoders] Re: Embedding WSDL?
> >
> >
> >
> > I have the same question as Kelly. It seems that the
initial
call
> > to a webservice is slower because of the wsdl.
Subsequent calls
are
> > fine, but there is always an initial
delay. I know, switch to
> > HTTPService or RemoteObject.
> >
> > For the following code, I'm thinking that I could override the
> > loadWSDL() function, but the mx.rpc.soap.WebService API
doesn't
> > appear in the framework. Is the API final? Is there a
work-
around
> > here?
> >
> > public function
DataServices(pri:PrivateClass, wsdl:String)
> > {
>
> this.ws = new WebService();
> > ws.wsdl = wsdl;
> >
ws.loadWSDL();
> > ws.useProxy = false;
> >
ws.makeObjectsBindable = false;
> > }
> >
> >
Thank you,
> > -TH
> >
> > --- In
[EMAIL PROTECTED]
<mailto:flexcoders%40yahoogroups.com>
> ups.com,
>
> "Kelly Birr" kelly.fx@ wrote:
> > >
> > > Is it
possible to somehow embed WSDL in the compiled SWF, or
> > read/write
the
> > > actual WSDL directly to the web services without them
having
to
> > request it
> > > via HTTP at runtime?
Can I bind the WSDL to a string that I
> > manually
> > >
request via UrlLoader?
> > >
> > > Along with that if I
have 15 different web service tags on
> > different MXML
> >
> components of my application that all call the same web
service
> > with the
> > > exact same WSDL Uri, will the WSDL
cache? or will each Web
Service
> > instance
> > >
make a request for the WSDL via HTTP when it is initialized.
> > >
> > > My client is very concerned that the application may be
> > too "chatty" on
> > > their network and it seems that
these WSDL requests may be
part of
> > the
> > >
problem. I'm using Flex 2.0 RTM.
> > >
> > > -
Kelly
> > >
>
>
>