.NET ASMX - возвращение чистого JSON?

Я схожу с ума здесь. Я'мы просмотрели следующие записи иникто из них исправляют ненормальное поведение, которое я вижу:

Как вернуть JSON из веб-службы 2.0 asmxКак вернуть JSON из ASP.NET .asmx?Как позволить файлу ASMX выводить JSONI '

Мы также посмотрели и подтвердили мои настройки:http://www.asp.net/AJAX/documentation/live/ConfiguringASPNETAJAX.aspx

Вот мой код (код ASMX позади):

namespace RivWorks.Web.Services
{
    /// 
    /// Summary description for Negotiate
    /// 
    [WebService(Namespace = "http://rivworks.com/webservices/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [ScriptService]
    public class Negotiate : System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public RivWorks.Data.Objects.rivProduct GetSetup(string jsonInput)
        {
            // Deserialize the input and get all the data we need...
            // TODO:  This is a quick hack just to work with this for now...
            char[] tokens = { '(', '{', '}', ')', ',', '"' };
            string[] inputs = jsonInput.Split(tokens);
            string inputRef = "";
            string inputDate = "";
            string inputProductID = "";
            for (int i = 0; i < inputs.Length; i++)
            {
                if (inputs[i].Equals("ref", StringComparison.CurrentCultureIgnoreCase))
                    inputRef = inputs[i+2];
                if (inputs[i].Equals("dt", StringComparison.CurrentCultureIgnoreCase))
                    inputDate = inputs[i+2];
                if (inputs[i].Equals("productid", StringComparison.CurrentCultureIgnoreCase))
                    inputProductID = inputs[i+2];
            }

            Guid pid = new Guid(inputProductID);
            RivWorks.Data.Objects.rivProduct product = RivWorks.Data.rivProducts.GetProductById(pid);

            return product;
        }
    }

Когда я запускаю это из моего экземпляра localhost, я получаю этот набор результатов:

  
    modal
    775
    600
    
    http://localhost.rivworks.com/flash/negotiationPlayer.swf
    
    
    http://cdn1.rivworks.com/Element/Misc/734972de-40ae-45f3-9610-5331ddd6e8f8/apple-logo-2.jpg
    
  

Что мне не хватает ???

ПРИМЕЧАНИЕ. Я использую платформу 3.5 (или, по крайней мере, мне показалось, что все в моем web.config помечено для 3.5.0.0).

ОБНОВЛЕНИЕ: я захожу в сервис и использую поле ввода на этой странице. Вы можете попробовать здесь:http://dev.rivworks.com/services/Negotiate.asmx?op=GetSetup, Мы также пытаемся получить к нему доступ через веб-приложение на основе JS, работающее на другом сайте (основное назначение этого конкретного сервиса). У меня нет кода для этого здесь. (Извините, тестовая форма доступна только с localhost.)

ОБНОВЛЕНИЕ: я добавил следующую тестовую страницу (JsonTest.htm), чтобы попытаться увидеть, что происходит вперед и назад. Все, что я получаю, это ошибка 500! Я даже пытался присоединиться к процессу и проникнуть в мою службу. Ошибка 500 выдается до того, как конвейер ASP попадет в мой код.




    Untitled Page
    

    
        function sendReq() {
            alert("Before AJAX call");
            $.ajax(
            {
                type: "POST"
                , url: "http://kab.rivworks.com/Services/Negotiate.asmx/GetSetup"
                , data: "{ \"ref\":\"http://www.rivworks.com/page.htm\", \"dt\":\"Mon Dec 14 2009 10:45:25 GMT-0700 (MST)\", \"productId\":\"5fea7947-251d-4779-85b7-36796edfe7a3\" }"
                , contentType: "application/json; charset=utf-8"
                , dataType: "json"
                , success: GetMessagesBack
                , error: Failure
            }
            );
            alert("After AJAX call");
        }
        function GetMessagesBack(data, textStatus) {
            alert(textStatus + "\n" + data);
        }
        function Failure(XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus + "\n" + errorThrown + "\n" + XMLHttpRequest);
        }
    


    Bleh
    <a href="javascript:sendReq()">Test it</a>


Почему это так больно тяжело?!?! :)

ОБНОВЛЕНИЕ: Работа через сервис WCF. Вот моя установка:Интерфейс:

namespace RivWorks.Web.Services
{
    [ServiceContract(Name = "Negotiater", Namespace = "http://www.rivworks.com/services")]
    public interface INegotiaterJSON
    {
        //[WebMethod]
        [OperationContract]
        [WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
        ResultSet GetSetup(string jsonInput);
    }
}

Учебный класс:

namespace RivWorks.Web.Services
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    public class Negotiater : INegotiaterJSON
    {
        public ResultSet GetSetup(string jsonInput)
        {
            //code removed for brevity - see ASMX code above if you are really interested.
            return resultSet;
        }
    }


    [DataContract()]
    public class ResultSet
    {
        [DataMember]
        public string uiType = "modal";
        [DataMember]
        public int width = 775;
        [DataMember]
        public int height = 600;
        [DataMember]
        public string swfSource = "";
        [DataMember]
        public string buttonConfig = "";
    }
}

web.config

  
    
      
        
          
        
      
      
        
          
        
      
    
    
      
        
          
        
        
          
        
      
      
        
          
          
        
      
    
    
      
        
      
    
    
      
        
      
    
  

простая тестовая страница




    Untitled Page
    

    
        function sendReq() {
            alert("Before AJAX call");
            $.ajax(
            {
                type: "POST"
                , url: "http://dev.rivworks.com/Services/Negotiater.svc/GetSetup"
                , data: "{ \"ref\":\"http://www.rivworks.com/page.htm\", \"dt\":\"Mon Dec 14 2009 10:45:25 GMT-0700 (MST)\", \"productId\":\"5fea7947-251d-4779-85b7-36796edfe7a3\" }"
                , contentType: "application/json; charset=utf-8"
                , dataType: "json"
                , success: GetMessagesBack
                , error: Failure
            }
            );
            alert("After AJAX call");
        }
        function GetMessagesBack(data, textStatus) {
            alert(textStatus + "\n" + data);
        }
        function Failure(XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus + "\n" + errorThrown + "\n" + XMLHttpRequest);
        }
    



    Bleh
    
    <a href="javascript:sendReq()">Test it</a>


И теперь я получаю эту ошибку:IIS уточнил схемы аутентификацииИнтегрированная проверка подлинности Windows, анонимный, но привязка поддерживает спецификацию только одной схемы аутентификации. Допустимые схемы аутентификации: дайджест, согласование, NTLM, базовая или анонимная. Измените настройки IIS, чтобы использовалась только одна схема аутентификации.

Как мне справиться с этим? <состояние эмоций = 'выжал физические =»избить '/>

Ответы на вопрос(2)

Ваш ответ на вопрос