Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Веб-Сервис ASP.NET 2.0, Как опросить его с клиентской стороны? 
V
    Опции темы
JaguarSmith
  Дата 26.6.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



 smile Здравствуйте!

Я собственно задал вопрос сначала здесь, но похоже, что никто в ASP.NET не сталкивался с этой проблемой...  smile 

Задача простая есть веб-сервис - http://www.jaguarsmith.ru/GuestBook/JGuestBook.asmx  и надо получить результат функции GetBooksSize("granpik") из javasript`а... На локальном сервере всё просто делается через POST - http://localhost/jaguarsmith/GuestBook/JGuestBook.asmx/GetBooksSize?BookName=granpik но вот на сервере такой вариант отказывается работать категорически!  smile 

 smile Никто не сталкивался с веб-сервисами на ASP.NET?

Зы. Я использую код из книги AJAX в действии:
Код

// моя функция:
    var service ="http://localhost/MySite/GuestBook/JGuestBook.asmx"      // если сделать так то всё работает
 // var service ="http://www.jaguarsmith.ru/GuestBook/JGuestBook.asmx"   // а так - совсем не работает!

function CheckBookUpdated()
{
 var url = service + "/GetBooksSize";
 var params = "BookName=" + GuestBook ;
 var httpMetod = "POST";
 BookSizeReq = new ajax.ContentLoader(url,BookUpdated,null,httpMetod,params,null);
}
function BookUpdated()
{
....
}

// код взят из книги AJAX в действии...
var ajax=new Object();

ajax.READY_STATE_UNINITIALIZED=0;
ajax.READY_STATE_LOADING=1;
ajax.READY_STATE_LOADED=2;
ajax.READY_STATE_INTERACTIVE=3;
ajax.READY_STATE_COMPLETE=4;


/*--- content loader object for cross-browser requests ---*/
ajax.ContentLoader=function(url,onload,onerror,method,params,contentType){
  this.req=null;
  this.onload=onload;
  this.onerror=(onerror) ? onerror : this.defaultError;
  this.loadXMLDoc(url,method,params,contentType);
  this.resp = null
}

ajax.ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){
  if (!method){
    method="GET";
  }
  if (!contentType && method=="POST"){
    contentType='application/x-www-form-urlencoded';
  }
  if (window.XMLHttpRequest){
    this.req=new XMLHttpRequest();
  } else if (window.ActiveXObject){
    this.req=new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (this.req){
    try{
      var loader=this;
      this.req.onreadystatechange=function(){
        ajax.ContentLoader.onReadyState.call(loader);
      }
      this.req.open(method,url,true);
      if (contentType){
        this.req.setRequestHeader('Content-Type', contentType);
      }
      this.req.send(params);
    }catch (err){
      this.onerror.call(this);
    }
  }
}

ajax.ContentLoader.onReadyState=function(){
  var req=this.req;
  var ready=req.readyState;
  if (ready==ajax.READY_STATE_COMPLETE){
    var httpStatus=req.status;
    if (httpStatus==200 || httpStatus==0){
      this.resp = req.responseText;
      this.onload.call(this);
    }else{
      this.resp = dataload_error
      this.onerror.call(this);
    }
  }
}

ajax.ContentLoader.prototype.defaultError=function(){
  
  tmp.innerText = "error fetching data!"
                + "\n\nreadyState:"+this.req.readyState
                + "\nstatus: "+this.req.status
                + "\nheaders: "+this.req.getAllResponseHeaders()
                + "\nResponse: "+this.req.responseText; 
  return true;
}
  

Это сообщение отредактировал(а) JaguarSmith - 26.6.2006, 20:08
PM MAIL YIM   Вверх
Sardar
Дата 26.6.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



JaguarSmith, необходимо что бы твоя страница, что аяксом книгу дёргает, лежала тоже в домене www.jaguarsmith.ru. Иначе никак, политика безопасности. ИЕ ещё позволял другие домены опрашивать, но после SP2 по моему уже нет.  


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
JaguarSmith
Дата 26.6.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



Нее!!!

Во-первых она и лежит: http://www.jaguarsmith.ru/guestbook/default.aspx (собственно вебсервис сообщает клиенту что введены новые записи и надо обновить страницу)

Во-вторых тут непонятен сам механизьм обращения к сервису... Я щас пытаюсь вычитать в ATLAS - реализация аякса для платформы .NET - но я, мягко говоря,  не очень силён в javascript поэтому дело идёт со скрипом еле-еле smile 
 
PM MAIL YIM   Вверх
Sardar
Дата 27.6.2006, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JaguarSmith @  26.6.2006,  22:58 Найти цитируемый пост)
реализация аякса для платформы .NET 

А без разницы smile
Кстати страница у тебя в UTF-8, а скрипты в левой кодировке, будут кракозябры.

Цитата(JaguarSmith @  26.6.2006,  22:58 Найти цитируемый пост)
Во-вторых тут непонятен сам механизьм обращения к сервису... 

А что не ясно? XMLHttpRequest может делать обычные запросы и подгружать XML. Другими словами можно сделать полноценный запрос к вебсервису (SOAP), правда это редко кто делает, все грузят что придёт и обычно текстом, а не XML smile

У тебя заметил функцию ajax_XML2Text, ты глянь на неё и подумай зачем тебе строить XML если ты только текст берёшь? Или в ASP.Net вебсервисе по дефолту всегда XML отдаёться (кто тогда словарь задаёт?).

Весело твой сервер советы даёт: http://www.jaguarsmith.ru/GuestBook/JGuest...op=GetBooksSize smile
 


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
JaguarSmith
Дата 27.6.2006, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



Цитата

Кстати страница у тебя в UTF-8, а скрипты в левой кодировке, будут кракозябры

Кракозябров не буит! smile  там все функции выдают ответ в цифрах и это всё как-раз решено локально... функция ajax_XML2Text какраз этим и занимается правда я не уверен что я реализовал её лучшим образом:
Код

function ajax_XML2Text(inXML)
{
    var tmpDiv = document.createElement('div');
    tmpDiv.innerHTML = inXML;
    var outText = tmpDiv.innerText;
    var bdy = tmpDiv.parentNode;
    bdy.removeChild(tmpDiv);
    return    outText;
}

тем неменее работает! smile 

Ответ всегда выдается ввиде XML например вот так:
Код

<?xml version="1.0" encoding="utf-8" ?> 
  <string xmlns="http://tempuri.org/">9</string> 


Кстати ответ об ашипке тоже выдается в XML...

Цитата

А что не ясно? XMLHttpRequest может делать обычные запросы и подгружать XML. Другими словами можно сделать полноценный запрос к вебсервису (SOAP), правда это редко кто делает, все грузят что придёт и обычно текстом, а не XML

  smile Вот как-раз не ясно как сделать [B]полноценный[/B] запрос к вебсерверу чтобы он дал ответ!  smile  

Это сообщение отредактировал(а) JaguarSmith - 27.6.2006, 01:47
PM MAIL YIM   Вверх
Sardar
Дата 28.6.2006, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JaguarSmith @  27.6.2006,  00:43 Найти цитируемый пост)
тем неменее работает! 

Посоветовал бы XPath, но он зараза под мозиллу больно долгую прелюдию хочет (много кода), а элегантный selectNode только в ИЕ есть. В инете гуляет несколько скриптов прикручивающих selectNode к мозилле и вообще всем W3C compatible браузерам. Попробуй, удобно из ответа инфу вытаскивать, а не этим топорным методом как у тебя сейчас smile

Цитата(JaguarSmith @  27.6.2006,  00:43 Найти цитируемый пост)
как сделать полноценный запрос к вебсерверу чтобы он дал ответ!

Для этото разбираемся что есть SOAP, примеры запросов твой сервак сразу же и показывает (HTTP запрос как есть): 
Код
POST /GuestBook/JGuestBook.asmx HTTP/1.1
Host: www.jaguarsmith.ru
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetBooksSize xmlns="http://tempuri.org/">
      <BookName>имя твоей книги</BookName>
    </GetBooksSize>
  </soap12:Body>
</soap12:Envelope>


Советую на время сесть только под ИЕ, поплясать немного, а затем уже либо писать самому, либо брать строронюю либу оборачивающую XMLHttpRequest кроссплатформено. На время забей на ошибки сети (в релизе отлавливай ошибки! не уподобляся половине либ, что виснут при ошибках smile ).

Вкуриваем это
Теперь врубаемся что open нужно вызывать с POST что бы выполнить POST запрос, а в send указать SOAP вызов (тот XML что в примере). В ответ придёт это (HTTP ответ как есть):

Код
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: длина в байтах

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetBooksSizeResponse xmlns="http://tempuri.org/">
      <GetBooksSizeResult>что у тебя там возвратить должен</GetBooksSizeResult>
    </GetBooksSizeResponse>
  </soap12:Body>
</soap12:Envelope>


Ты этого всего не видишь, XMLHttpRequest делает всё за тебя сам, ты получаешь responseXML у которого .selectNodes("//GetBooksSizeResult/text()")  и получаешь содержимое. В этом и есть его мощь, возможность делать HTTP запросы удобным способом, потому и пользуеться повсеместно и в простых прогах. Естественно можно пойти дальше и написать стили XSLT (transformNode, опять же элегантная ИЕ фича, у других масса кода), что бы генерить контент по ответу сразу, без скриптов как это делают люди не знающие smile

В итоге: XMLHttpRequest компонент позволаяет делать HTTP запросы и получать ответы. Тело запроса можно указать самому, тело ответа можно получить как текстом, так и распарсеным DOM деревом. Отсюда получаеться что посредством XMLHttpRequest можно опросить что угодно что понимает HTTP запросы, конечно с ограничением по домену. В теле запроса могут быть просто пары, как это кодирует форма со странички посылая POST запрос, либо XML для всебсервиса, либо вообще url-encoded файл если сумеешь его прочитать/сгенерить smile
Для общего развития: http://msdn.microsoft.com/library/en-us/dn....asp?frame=true     


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
JaguarSmith
Дата 29.6.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 16.1.2005

Репутация: нет
Всего: 1



Баальшое спасибо!
Пашел вкуривать!
Надеюсь торкнет!  smile  
PM MAIL YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1192 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.