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'); > > > > > > } > > > > > > });