Вызов удаленного ASP.NET WebService с использованием jQuery - PullRequest
2 голосов
/ 15 сентября 2009

Я написал простой ASP.NET WebService, предварительно скомпилировал его и разместил в виртуальном каталоге.

Код веб-сервиса:

namespace Test.Services
{
    /// <summary>
    /// Summary description for AgentService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [ScriptService]
    public class TestService : System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat=ResponseFormat.Json)]
        public string SayHello(string name)
        {
            return "Hello, " + name;
        }
    }
}

Javascript код для доступа к этому веб-сервису:

function SayHello() {
    var serviceURL = "http://172.42.100.47/TestService/TestService.asmx/SayHello";
    var requestData = "{name:'" + $('#txtName').val() + "'}";

    $.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: serviceURL,
        data: requestData,
        dataType: 'json',
        success: function(result){
            alert(result.d);
        }
    });
}

Если я использую эту функцию со страницы, размещенной на том же IP-адресе, она работает как положено. Но если я получаю к нему доступ с другого IP-адреса (например, 127.0.0.1), тогда я получаю «Отказано в доступе» в IE и «404 объект не найден» в FireFox.

Как мне написать веб-сервис с использованием ASP.NET, который можно использовать удаленно из любого места, и каким должен быть Javascript для его использования.

Каждый найденный мной пример относится к WebService, размещенному в том же каталоге проекта.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

Вы не можете использовать веб-сервисы или любые веб-ресурсы из других доменов (не можете получить доступ к междоменному веб-сервису). Вы можете получить доступ к ресурсам только из своего домена.

Вместо этого вы можете использовать Dynamic Script Tag или JSONP метод взлома для достижения этой цели.

0 голосов
/ 14 февраля 2013

Лучший способ использовать удаленный веб-сервис (тех, кто не существует в одном домене веб-сайта) - это передать запрос через PHP (или аналогичные сценарии на стороне сервера). В случае PHP вы можете выполнить следующие грубые шаги:

  1. вашей HTML-странице, размещенной на example.com, требуется удаленный сервис, размещенный на example2.com.

  2. Ваша HTML-страница, размещенная на example.com, использует сервис через PROXY для чтения из PHP-скрипта, расположенного в том же домене example.com:

    $. Ajax ({..bla ..., url: '/phpscripts/proxy.php'casts);

  3. /phpscripts/proxy, размещенный на example.com, предназначен для связи с example2.com с использованием библиотеки php CURL. Он получит ответ html (или что-то еще, в зависимости от веб-службы) от example2.com и затем повторно передаст обработанное сообщение обратно на html-страницу, размещенную на example.com. Вы можете получить этот ответ в example.com, используя аргумент ,success(html){ } в объекте $.ajax.

0 голосов
/ 15 сентября 2009

На машине, где вы обслуживаете этот веб-сервис, убедитесь, что веб-сервер (IIS) разрешает удаленные подключения. Если я не ошибаюсь, веб-сервер разработки не разрешает удаленные подключения, по крайней мере по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...