SocialRatingManager causing custom WCF server to send back Bad Request


  • I'm working on a custom WCF for SharePoint 2010 that I call through Javascript that grabs the ratings of all the users who rated a particular item. Since there is no way for a standard user to retrieve all ratings (outside of giving them Manage Social Data rights), I'm trying to do this part via elevated privledges. Of course, I can't use that in Javascript so that's why I have my custom web service. In any case, I've been messing around adding some code piece by piece because before when I put all my code in I couldn't figure out why I was getting a Bad Request sent back as the error thrown.

    When I finally added code to get the SocialRatingManager to make a call (GetRating()) I got the bad request sent back to me. I can't for the life of me figure out why!

    Below are code snippets, in case they help. Thanks for any help in advance. Let me know if I should provide anymore information.

    WCF C#:

        public interface ITestService
            [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
            int SetVotes(string url, string listName);
     public int SetVotes(string url, string listName)
                int test = 60;
                    using (SPSite site = new SPSite(url))
                        using (SPWeb ElevatedWeb = site.OpenWeb())
                            var item = ElevatedWeb.Lists[listName].Items.GetItemById(GetItemID(url));
                            test = Convert.ToInt32(item["Votes"]);
                            var serviceContext = SPServiceContext.GetContext(site);
                            var uri = new Uri(url);
                            var ratingManager = new SocialRatingManager(serviceContext);
                            var test2 = ratingManager.GetRating(uri);
                return test;
            private int GetItemID(string url) 
                int index = url.IndexOf("?");
                if (index > 0)
                    url = url.Substring(index).Remove(0, 1);
                var node = HttpUtility.ParseQueryString(url).Get("ID");
                return Convert.ToInt32(node);


    function CallService2(opts, $obj, serviceData, callBack) {
                type: "GET",
                url: opts.SetVotesUrl,
                data: { url: serviceData.url, listName: serviceData.listName },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    callBack(msg, opts, $obj);
                error: function (XMLHttpRequest, textStatus, errorThrown) {

    2012年3月13日 21:52