No problem. Probably I should've been a bit more explicit in reference to the setup.
My WCF service is hosted in IIS 7, and the Stream and Callback classes I mentioned are in the same solution as the WCF endpoint. Also, you have to add a line to your web.config file to reference the IHttpHandler subclass (Callback class) so that WCF will recognize it. Further, even though I added that reference to my web.config IIS 7 STILL didn't recognize it. I had to explicitly add the module reference by way of IIS's Modules area. Now, it could be that this was a cache issue or something, and that IIS would've recognized my web.config entry at some point. I will likely refactor this and try to move the Stream and Callback classes to a separate assembly so that any future WCF services could use them again. I haven't tried this out yet but should work fine. Good luck. On Oct 24, 10:23 am, RWF <[EMAIL PROTECTED]> wrote: > thanks tenacious for all the help. It sounds like i would just ditch > my IIS hosted WCF service, i was under the impression from this > link:http://msdn.microsoft.com/en-us/library/cc716898.aspx > that it was some how possible to rig WCF to format the response > natively but the solution it referrers to does not exist in the > samples download. > > On Oct 24, 9:00 am, tenaciousd <[EMAIL PROTECTED]> wrote: > > > 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 yourWCF > > > 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 usingWCF? My IIS hostedWCFservice is basically just > > > > acting like a proxy to a windows hostedWCFservice, 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 isjsonp(check their doc but I'm > > > > > pretty sure that's the case). > > > > > > As forWCFthe 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 aWCFendpoint 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 usingWCFtoo, have you done projects that require an $.ajax POST > > > > > > request to aWCFservice 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->wcfissue let me know. > > > > > > > > On Oct 10, 12:07 pm, tenaciousd <[EMAIL PROTECTED]> wrote: > > > > > > > > > I'm using jQuery $.ajax to make a cross-domainjsonpcall to aWCF > > > > > > > > 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. > > > > > > > > > TheWCFendpoint 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'); > > > > > > > > } > > > > > > > > });