Er, "bugger" should've been "buffer".  Quite a typo.

On Oct 24, 9:58 am, tenaciousd <[EMAIL PROTECTED]> wrote:
> My service setup isn't exactly the same as yours but I think the same
> solution will work for you.
>
> You'll need to add two classes, one that inherits from Stream (we'll
> call is JsonStream) and another that inherits from the IHttpModule
> interface (we'll call this JsonModule).  The JsonStream class will
> need a public property to store the name of the callback (e.g.
> CallbackFunctionName).
>
> JsonModule's Init needs to first look for all RequestType = GET and,
> for all such requests, do a GetValues on "callback" to see if the
> caller expects us to make a callback or simply return data.  If a
> callback param is present we need to create a new instance of
> JsonStream passing the current context's Response.Filter to the
> constructor and then set CallbackFunctionName to the appropriate
> value.  Then, in JsonStream in the overridden Write method, if
> CallbackFunctionName has a value you need to do something like (where
> _stream is the value passed into JsonStream's constructor):
>
> string content = CallbackFunctionName + "(" +
> Encoding.UTF8.GetString(bugger) + ");";
> _stream.Write(Encoding.UTF8.GetBytes(content), 0, content.Length);
>
> In this way you've decoupled the callback functionality from your WCF
> service(s) but it "just works" for cases that require it.  Hopefully
> this implementation will work in your scenario.
>
> On Oct 24, 9:22 am, RWF <[EMAIL PROTECTED]> wrote:
>
> > Thanks for the info.  How exactly are you writing directly to the
> > response using WCF?  My IIS hosted WCF service is basically just
> > acting like a proxy to a windows hosted WCF service, so they both use
> > the same contract, but the IIS hosted service is a REST based
> > service.  Is there a way to maintain this uniformity of contracts,
> > while writing directly to the response of the IIS service?
>
> > On Oct 23, 8:22 am, tenaciousd <[EMAIL PROTECTED]> wrote:
>
> > > If you're going to do cross-domain calls you can't do a POST, only a
> > > GET.  I think even if you specify POST as your type jQuery will
> > > convert it to a GET if your datatype is jsonp (check their doc but I'm
> > > pretty sure that's the case).
>
> > > As for WCF the key is just making sure that you wrap your return in
> > > the callback method and write it to the Response.  In other words, you
> > > can't simply have a WCF endpoint that returns a json-formatted
> > > object.  Instead you need to write something like
> > > "callbackMethodName(" + yourJSONObject + ");" to the Response.  Once
> > > you've done this jQuery will execute the callback call, in which it
> > > will do an eval() on yourJSONObject and then call the success method,
> > > passing it the JSON object in the data parameter.  At that point you
> > > will have dot notation on your JSON object.
>
> > > On Oct 22, 7:31 pm, RWF <[EMAIL PROTECTED]> wrote:
>
> > > > I am using WCF too, have you done projects that require an $.ajax POST
> > > > request to a WCF service cross site?  If you have, how did come up
> > > > with a server proxy to allow for cross site communication?
>
> > > > On Oct 10, 2:01 pm, tenaciousd <[EMAIL PROTECTED]> wrote:
>
> > > > > Nevermind.  The fundamental issue was that the json object wrapped in
> > > > > the callback name does, in fact, need to be written to the Response.
> > > > > I'm an idiot.  Anyway, it's working now.  If others hit the same
> > > > > jquery ->jsonp-> wcf issue let me know.
>
> > > > > On Oct 10, 12:07 pm, tenaciousd <[EMAIL PROTECTED]> wrote:
>
> > > > > > I'm using jQuery $.ajax to make a cross-domainjsonpcall to a WCF
> > > > > > service.  The call is working fine, entering the service endpoint, 
> > > > > > but
> > > > > > the callback method never fires.  I've tried many permutations of
> > > > > > changes and can't seem to get this to work.
>
> > > > > > The WCF endpoint is returning a string (NOT doing a Response.Write)
> > > > > > that contains a json object inside the callback wrapper (e.g.
> > > > > > "jsonp123( {"Author":"John Doe","Price":"$35.90"} )" ) and the 
> > > > > > content-
> > > > > > type returned from the service is application/json; charset=utf-8.
>
> > > > > > $.ajax call is below.  Any help is much appreciated.
>
> > > > > >         var data = {"ISBN" : $("#isbn1").val()};
>
> > > > > >         $.ajax({
> > > > > >                 type: "GET",
> > > > > >                 cache: false,
> > > > > >                 url: 
> > > > > > "http://localhost:63132/Widget.svc/GetProductInfo";,
> > > > > >                 scriptCharset: "utf-8",
> > > > > >                 dataType: "jsonp",
> > > > > >                 data: data,
> > > > > >                 success: function(data, textStatus){
> > > > > >                         alert("success");
> > > > > >                 },
> > > > > >                 error: function(XMLHttpRequest, textStatus, 
> > > > > > errorThrown){
> > > > > >                         alert('error');
> > > > > >                 }
> > > > > >         });

Reply via email to