Как из ASP вызвать метод веб-сервиса написанный в .NET
От: Nickolaz Россия  
Дата: 05.10.07 07:04
Оценка:
Нужно из приложения написанного на ASP с JavaScript вызвать веб метод существующего веб-сервиса .NET возвращающего строку. Подскажите как это сделать, хотелось бы демонстративный пример...?
Re: Как из ASP вызвать метод веб-сервиса написанный в .NET
От: Neco  
Дата: 09.10.07 08:06
Оценка:
разве нельзя на asp вызвать это:
---------------------
POST /wsrv1/Service.asmx/HelloWorld HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length

prm=string
----------------------
???
всю ночь не ем, весь день не сплю — устаю
Re[2]: Как из ASP вызвать метод веб-сервиса написанный в .NE
От: Nickolaz Россия  
Дата: 11.10.07 08:49
Оценка:
Здравствуйте, Neco, Вы писали:

N>разве нельзя на asp вызвать это:

N>---------------------
N>POST /wsrv1/Service.asmx/HelloWorld HTTP/1.1
N>Host: localhost
N>Content-Type: application/x-www-form-urlencoded
N>Content-Length: length

N>prm=string

N>----------------------
N>???

Поясню задачу... Есть у меня кнопка в ASP проекте и при её нажатии нужно вызывать веб-метод описанный и созданный в другом (.NET) проекте. У веб-метода нет входных параметров и на выходе строка. То, что ты написал я так понимаю это поля объекта какого-то должны быть, просто так ведь в JavaScript этот код не напишешь... Более детальный, развёрнутый пример хотелось бы в стиле для чайников, где вопросов возникнуть не должно в принципе после этого. Причём как вызвать веб-метод и принять результат в переменную. Какие объекты и какой вообще принцип используется для вызова веб-метода из javaScript. Чайник я в JavaScript и ASP. Вроде нашёл, что нужно создавать SOAP сообщение руками и отправлять на веб сервис.. но вот как подробно и понятным полным языком с кодом и коментами такого не нашёл. Буду примного благодарен да и думаю все кто в эту тему заглядывают...
Re[3]: Как из ASP вызвать метод веб-сервиса написанный в .NE
От: Neco  
Дата: 11.10.07 13:53
Оценка:
SOAP ромадить не обязательно — можно просто сформировать http POST запрос, к примеру такой как я привёл. И в asp и в js это (я уверен) возможно довольно просто. Создаётся какой-то объект через CreateObject (не помню точно, но в названии присутствовали http и request), и выполняется какой-то из его методов.

вот для примера кусок axd, в котором вызывается веб-метод

    catch(e) {
        try {
            xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {
        }
    }
    var setRequestHeaderMethodExists = true;
    try {
        setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);
    }
    catch(e) {}
    var callback = new Object();
    callback.eventCallback = eventCallback;
    callback.context = context;
    callback.errorCallback = errorCallback;
    callback.async = useAsync;
    var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
    if (!useAsync) {
        if (__synchronousCallBackIndex != -1) {
            __pendingCallbacks[__synchronousCallBackIndex] = null;
        }
        __synchronousCallBackIndex = callbackIndex;
    }
    if (setRequestHeaderMethodExists) {
        xmlRequest.onreadystatechange = WebForm_CallbackComplete;
        callback.xmlRequest = xmlRequest;
        xmlRequest.open("POST", theForm.action, true);
        xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlRequest.send(postData);
        return;
    }
    callback.xmlRequest = new Object();
    var callbackFrameID = "__CALLBACKFRAME" + callbackIndex;
    var xmlRequestFrame = document.frames[callbackFrameID];
    if (!xmlRequestFrame) {
        xmlRequestFrame = document.createElement("IFRAME");
        xmlRequestFrame.width = "1";
        xmlRequestFrame.height = "1";
        xmlRequestFrame.frameBorder = "0";
        xmlRequestFrame.id = callbackFrameID;
        xmlRequestFrame.name = callbackFrameID;
        xmlRequestFrame.style.position = "absolute";
        xmlRequestFrame.style.top = "-100px"
        xmlRequestFrame.style.left = "-100px";
        try {
            if (callBackFrameUrl) {
                xmlRequestFrame.src = callBackFrameUrl;
            }
        }
        catch(e) {}
        document.body.appendChild(xmlRequestFrame);


как видишь, создаётся объект Microsoft.XMLHTTP. Не знаю, откуда у линуксовой мозиллы Microsoft.XMLHTTP, но наверное там это делается как-то по-другому. Вполне возможно, что у asp есть и собственные — более "нормальные" методы POST запроса.
всю ночь не ем, весь день не сплю — устаю
Re[4]: Как из ASP вызвать метод веб-сервиса написанный в .NE
От: Neco  
Дата: 11.10.07 13:55
Оценка:
тьфу, вот более понятный, кажись кусок кода:

    try {
        xmlRequest = new XMLHttpRequest();
    }
    catch(e) {
        try {
            xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {
        }
    }
всю ночь не ем, весь день не сплю — устаю
Re[4]: Как из ASP вызвать метод веб-сервиса написанный в .NE
От: Nickolaz Россия  
Дата: 12.10.07 04:39
Оценка:
Здравствуйте, Neco, Вы писали:

N>SOAP ромадить не обязательно — можно просто сформировать http POST запрос, к примеру такой как я привёл. И в asp и в js это (я уверен) возможно довольно просто. Создаётся какой-то объект через CreateObject (не помню точно, но в названии присутствовали http и request), и выполняется какой-то из его методов.


N>вот для примера кусок axd, в котором вызывается веб-метод


N>
N>    catch(e) {
N>        try {
N>            xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
N>        }
N>        catch(e) {
N>        }
N>    }
N>    var setRequestHeaderMethodExists = true;
N>    try {
N>        setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);
N>    }
N>    catch(e) {}
N>    var callback = new Object();
N>    callback.eventCallback = eventCallback;
N>    callback.context = context;
N>    callback.errorCallback = errorCallback;
N>    callback.async = useAsync;
N>    var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
N>    if (!useAsync) {
N>        if (__synchronousCallBackIndex != -1) {
N>            __pendingCallbacks[__synchronousCallBackIndex] = null;
N>        }
N>        __synchronousCallBackIndex = callbackIndex;
N>    }
N>    if (setRequestHeaderMethodExists) {
N>        xmlRequest.onreadystatechange = WebForm_CallbackComplete;
N>        callback.xmlRequest = xmlRequest;
N>        xmlRequest.open("POST", theForm.action, true);
N>        xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
N>        xmlRequest.send(postData);
N>        return;
N>    }
N>    callback.xmlRequest = new Object();
N>    var callbackFrameID = "__CALLBACKFRAME" + callbackIndex;
N>    var xmlRequestFrame = document.frames[callbackFrameID];
N>    if (!xmlRequestFrame) {
N>        xmlRequestFrame = document.createElement("IFRAME");
N>        xmlRequestFrame.width = "1";
N>        xmlRequestFrame.height = "1";
N>        xmlRequestFrame.frameBorder = "0";
N>        xmlRequestFrame.id = callbackFrameID;
N>        xmlRequestFrame.name = callbackFrameID;
N>        xmlRequestFrame.style.position = "absolute";
N>        xmlRequestFrame.style.top = "-100px"
N>        xmlRequestFrame.style.left = "-100px";
N>        try {
N>            if (callBackFrameUrl) {
N>                xmlRequestFrame.src = callBackFrameUrl;
N>            }
N>        }
N>        catch(e) {}
N>        document.body.appendChild(xmlRequestFrame);
N>


N>как видишь, создаётся объект Microsoft.XMLHTTP. Не знаю, откуда у линуксовой мозиллы Microsoft.XMLHTTP, но наверное там это делается как-то по-другому. Вполне возможно, что у asp есть и собственные — более "нормальные" методы POST запроса.


Можно смело считать проблемой опытных пользователей — это проблема донести до неопытных свои знания в таком виде, чтобы тот их понял с первого раза. Где коменты? Из того кода, непоняток для меня куча, вследствии плохого знания JavaScript о чём я уже упоминал.
Вы писали: "И в asp и в js это (я уверен) возможно довольно просто. Создаётся какой-то объект через CreateObject (не помню точно, но в названии присутствовали http и request), и выполняется какой-то из его методов." Такой текст не несёт никакой полезной информации и считать его ответом ну никак нельзя. Я же нуб и что мне от того что это делается довольно прост и с помощью вызова какого-то метода. Мне нужен как нубу текст с поробнывми коментами по коду, где можно було бы увидеть логику всего процесса вызова веб метода и с помощью коментов увидеть как это делаетсяконкретно, вот тогда это можно сичтать полноценным отаветом и за это раздовать благодарности авторам. По коду у меня возниколо масса вопросов... для чего создаётся объект callback, что такое переменная useAsync, errorCallback, eventCallback. Что делает ф-ция WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback), что такое WebForm_CallbackComplete, что такое postData и откуда она вообще в методе send? Зчем содаётся фрэйм на форме? И что такое callBackFrameUrl? Что делается вот сдесь — document.body.appendChild(xmlRequestFrame); Как видите мне непонятен весь текст почти, кроме того, что создали шаблоны HTTP POST запросов в самом начале. Огромнейшая просьбы пишите и раскрывайте проблему от и до исходя из того принципа, что те кто будет это читать чайники с нулевыми знаниями, тогда ваши статьи и книги будут пользоваться спросом. Огромная просьба написать грамотные коменты для каждой строки кода. буду очень благодарен, да и наверно не только я но и все читающие тему.
Re[5]: Как из ASP вызвать метод веб-сервиса написанный в .NE
От: Neco  
Дата: 12.10.07 06:21
Оценка:
Друг!
Я тоже очень хреново разбираюсь во всё этом вебе — просто хочу помочь, чем могу.
Наверняка я предлагаю не самый подходящий тебе способ — просто подсмотрел его у мелкомягких.

комменты собственно тоже нужно спрашивать у них — так уж получилось, что они не комментят код в axd (за что им наверняка многие благодарны — кому охота качать ненужный трафик).
но по сути разобраться несложно.

вот этот кусок кода:
    try {
        xmlRequest = new XMLHttpRequest();
    }
    catch(e) {
        try {
            xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {
        }
    }

говорит о том, как создать объект, который будет формировать запрос.

а этот:
        xmlRequest.open("POST", theForm.action, true);
        xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlRequest.send(postData);

приблизительно намекает на то, что у этого объекта есть кое-какие методы, которые напоняют его смыслом.

а вот здесь:
http://www.google.ru/search?complete=1&hl=ru&q=new+XMLHttpRequest&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=null
можно развить тему, почитав об этом способе поподробнее, выяснив — то это или не то, что нужно.
а потом, когда сумеешь всё это дело провернуть, запостить то, что провернул здесь — и вот тогда ветка будет полезна.
всю ночь не ем, весь день не сплю — устаю
Re: Как из ASP вызвать метод веб-сервиса написанный в .NET
От: Othello  
Дата: 12.10.07 10:09
Оценка:
Используйте XMLHTTP

    var httpReq = new ActiveXObject("Microsoft.XMLHTTP");
    httpReq.open("GET" или "POST", url, false);
    httpReq.send(data);
    var result = httpReq.responseText;


ну и подготовить XML для отправки и посмотреть что приходит.
Если Веб сервис ваш (или есть возможность) то можете включить поддержку обычных HTTP GET и POST чтобы не мучаться с XML

web.config
<system.web>
        <webServices>
      <protocols>
        <add name="HttpPost"/>
        <add name="HttpGet"/>
      </protocols>
    </webServices>
</system.web>
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.