Есть ли способ получить веб-службу ASMX, созданную в VS 2005, для получения и возврата JSON? - PullRequest
1 голос
/ 27 апреля 2010

Я использую .NET 2.0 и Visual Studio 2005, чтобы попытаться создать веб-сервис, который можно использовать как в SOAP / XML, так и в формате JSON. Я прочитал Ответ Дэйва Уорда на вопрос Как вернуть JSON из веб-службы 2.0 asmx (в дополнение к чтению других статей на Encosia.com ), но Я не могу понять, как мне нужно настроить код моего asmx-файла для работы с JSON с использованием jQuery.

Два вопроса:

  • Как включить JSON в моем файле .NET 2.0 ASMX?
  • Что за простой вызов jQuery, который может использовать службу с использованием JSON?

Кроме того, я заметил, что, поскольку я использую .NET 2.0, я не могу реализовать using System.Web.Script.Services.ScriptService.


Вот мой код C # для демонстрационной службы ASMX:

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;


/// <summary>
/// Summary description for StockQuote
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class StockQuote : System.Web.Services.WebService {

    public StockQuote () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 

    }

    [WebMethod]
    public decimal GetStockQuote(string ticker)
    {
        //perform database lookup here
        return 8;
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }        
}

Вот фрагмент jQuery, который я нашел в интернете и попытался изменить:

    $(document).ready(function(){
        $("#btnSubmit").click(function(event){
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "http://bmccorm-xp/WebServices/HelloWorld.asmx",
                data: "",
                dataType: "json"
            })
            event.preventDefault();
        });
    });

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

Вы можете использовать ScriptService с .NET 2.0 / Visual Studio 2005. Вам просто нужно установить ASP.NET AJAX Extensions , выпущенные до .NET 3.5, прежде чем она станет основным компонентом рамки.

1 голос
/ 27 апреля 2010

Работать с Visual Studio 2005 и .NET 2.0 может быть немного сложно, тем более что большая часть информации в Интернете ссылается на .NET 3.5, которая по умолчанию включает компоненты AJAX.Как упоминалось Aaonaught , вам сначала нужно установить ASP.NET AJAX Extensions для .NET 2.0 .

После установки расширений AJAX вы захотите добавить новый веб-сайт «AJAX Enabled»: выберите «Файл»> «Создать»> «Веб-сайт».Выберите «Веб-сайт с поддержкой ASP.NET AJAX».Это будет файл конфигурации, отличный от обычного сайта ASP.NET в .NET 2.0, поэтому важно выбрать этот тип сайта.

Далее, если он еще не указан в вашей веб-конфигурации, вынужно щелкнуть правой кнопкой мыши на вашем проекте и перейти к «Добавить ссылку».Добавьте ссылку на System.Web.Extensions версию 1.0.61025.0.Вот где живут новые библиотеки сценариев ( ОБНОВЛЕНИЕ: я могу подтвердить, что если вы настроите проект в VS 2005 как «AJAX Enabled Web Site», он автоматически включит ссылку на эту сборку в Web.Configfile ).

Последние два шага позволят вам добавить ссылку на System.Web.Script.Services.ScriptService в ваш код.Теперь вы можете добавить веб-службу .asmx в свой проект, и все, что вам нужно сделать, это добавить следующий атрибут перед вашим классом обслуживания: [System.Web.Script.Services.ScriptService].Ваш код должен выглядеть примерно так:

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;



/// <summary>
/// Summary description for StockQuote
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class StockQuote : System.Web.Services.WebService {

    public StockQuote () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 

    }

    [WebMethod]
    public decimal GetStockQuote(string ticker)
    {
        //perform database lookup here
        return 8;
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }

}

Часть вашей проблемы с примером кода состоит в том, что вы не вызывали тот же веб-сервис, который вы определили в своем примере.Вы позвонили HelloWorld.asmx из jQuery, но вы должны были позвонить StockQuote.asmx/HelloWorld.Теперь, когда вы вызываете свой метод jQuery, используя application/json в качестве типа контента, веб-служба будет подчиняться и отвечать JSON вместо XML.


JSON POST

POST http://bmccorm-xp/WebServicesAjax/StockQuote.asmx/HelloWorld HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-us
Referer: http://bmccorm-xp/WebServicesAjax/TestJSON.html
Accept: application/json, text/javascript, */*
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: bmccorm-xp
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

JSON Ответ :

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Tue, 27 Apr 2010 19:11:40 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: application/json; charset=utf-8
Content-Length: 13

"Hello World"

jQuery POST с запросом XML:

POST http://bmccorm-xp/WebServicesAjax/StockQuote.asmx/HelloWorld HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-us
Referer: http://bmccorm-xp/WebServicesAjax/TestJSON.html
Accept: application/json, text/javascript, */*
Content-Type: text/xml; charset=utf-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Host: bmccorm-xp
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

XML Ответ :

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Tue, 27 Apr 2010 18:54:55 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 96

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...