|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Привет всем. Вопрос к знатокам WCF: Сабж - как? Дано: Обыкновенный WCF SHS ака консольное приложение. Все по дефолту. Утилитой WcfTestClient вызываем метод сервиса - ОК. Можем получить WSDL и т.п. Например: базовый урл: http://localhost:8888/hello метод: public string SayHello(string name){return "Hello " + name;} Код, думаю, приводить не имеет смысла, приведу только контракт: contract<wsdl:definitions name="HelloWorldService" targetNamespace="http://tempuri.org/"> − <wsdl:types> − <xsd:schema targetNamespace="http://tempuri.org/Imports"> <xsd:import schemaLocation="http://localhost:8888/hello?xsd=xsd0" namespace="http://tempuri.org/"/> <xsd:import schemaLocation="http://localhost:8888/hello?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/> </xsd:schema> </wsdl:types> − <wsdl:message name="HelloWorldService_SayHello_InputMessage"> <wsdl:part name="parameters" element="tns:SayHello"/> </wsdl:message> − <wsdl:message name="HelloWorldService_SayHello_OutputMessage"> <wsdl:part name="parameters" element="tns:SayHelloResponse"/> </wsdl:message> − <wsdl:portType name="HelloWorldService"> − <wsdl:operation name="SayHello"> <wsdl:input wsam:Action="http://tempuri.org/HelloWorldService/SayHello" message="tns:HelloWorldService_SayHello_InputMessage"/> <wsdl:output wsam:Action="http://tempuri.org/HelloWorldService/SayHelloResponse" message="tns:HelloWorldService_SayHello_OutputMessage"/> </wsdl:operation> </wsdl:portType> − <wsdl:binding name="BasicHttpBinding_HelloWorldService" type="tns:HelloWorldService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> − <wsdl:operation name="SayHello"> <soap:operation soapAction="http://tempuri.org/HelloWorldService/SayHello" style="document"/> − <wsdl:input> <soap:body use="literal"/> </wsdl:input> − <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> − <wsdl:service name="HelloWorldService"> − <wsdl:port name="BasicHttpBinding_HelloWorldService" binding="tns:BasicHttpBinding_HelloWorldService"> <soap:address location="http://localhost:8888/hello"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Вот как вызвать из, например, jQuery/$.ajax()? Вызов IIS-Hosted сервиса выглядел-бы так: http://localhost:8888/myservice.svc/SayHello и POST-данные {name:"Вася"} Здесь такой метод не прокатывает. Кто делал подобное? Перевернув мир - оглянись, может перевернулся ты сам?! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2010, 18:55 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
iConst... Здесь такой метод не прокатывает. ... Почему, собс-нно, "не прокатывает"? Если биндинги настроены на использование HTTP (например: WSHttpBinding), то селф-хостинг приложение ничем не отличается от обычного веб-сервера. Если биндинги сокето-бинарные, то никакой jQuery, ес-с-нно, к хосту обратиться не сможет. З.Ы. может у вас файр-волл куда-то не пускает? или политики назначения портов не дают селф-хосту открыть прослушку? (такая фича по-умолчанию стоит на висте-7-рке, простейшее решение - запускать селф-хост с правами админа). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2010, 10:23 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
qu-qu, По-порядку: 1) Селф-хост (консоль) запускается, с правами админа (иначе нужно прописывать доступ в неймспейсы - Вы уже отметили это) - ОК! 2) Утилита тест-клиента для службы демонстрирует правильную работу: вызываем, получаем что нужно. 3) В браузере вызывая http://localhost:8888/hello получаем стандартный ответ (ниже картинка) Как мне вызвать эту службу, ведь базовый адрес http://localhost:8888/hello а не http://localhost:8888/myservice.svc С помощью сгенерированного клиента работать нет проблем, но у меня стоит задача - вызов службы из простой хтмл-странички. Можете оказать помощь? Готов выложить тестовые проекты и готовую службу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2010, 11:09 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
iConstqu-qu, ... Можете оказать помощь? ... Могу, но не в ущерб своему рабочему времени (т.е. - когда придется). Вот, посмотрите сюда (3 файлика): 1. простейший селф-хост на BasicHttpBinding (прямо из шаблона VS2010 и примера MSDN); 2. пример обращения к нему из WSH на javascript; 3. "пример" обращения из jQuery (у меня пока не заработал, т.к. браузерный XMLHttpRequest ограничивает кросс-доменные запросы, я пока не разобрался как из локального файла дернуть службу через HTTP). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 11:20 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
qu-qu, Весьма признателен! Да, кроссдоменный запрос будет блокирован браузером, но я вижу это так: Разрешить службе выполнять GET-запросы (мой вариант) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Хотя многие считают это хаком, тем не менее это неплохо работает и работать будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 12:07 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
iConstqu-qu, Весьма признателен! Да, кроссдоменный запрос будет блокирован браузером, но я вижу это так: Разрешить службе выполнять GET-запросы ... и перевести службу на работу в формате JSON и использовать JSONP... ... Не за что... Не уловил, почему GET-запросы и JSON помогут решить проблему кроссдоменных обращений из браузера? (в любом случае - браузер будет открывать веб-сайт на одном http-web-хосте, ну типа как локальный файл с моим "примером", а ajax-ом ему нужно будет обращаться к другому wcf-self-хосту). Ведь, если на http-web-хосте делать "проброску" JSON-ом, то городить огород с обращениями к wcf-self-хосту через http-soap (или http-json) нет смысла - можно для http-web-хоста и прокси-клиента сгенерить... (если он, конечно, не на php). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 12:27 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
qu-qu Не за что... Не уловил, почему GET-запросы и JSON помогут решить проблему кроссдоменных обращений из браузера? (в любом случае - браузер будет открывать веб-сайт на одном http-web-хосте, ну типа как локальный файл с моим "примером", а ajax-ом ему нужно будет обращаться к другому wcf-self-хосту). Ведь, если на http-web-хосте делать "проброску" JSON-ом, то городить огород с обращениями к wcf-self-хосту через http-soap (или http-json) нет смысла - можно для http-web-хоста и прокси-клиента сгенерить... (если он, конечно, не на php). В том-то и дело - нужно решить задачу локального веб-приложения на "чистом" ХТМЛ, без развертывания веб-сервера. Преимущества: 1) можно запустить на любой вин-машине, а не только старших версий (IIS отсутствует) 2) простота развертывания - фактически одна служба, перевести в фоновый режим 3) простота модернизации пользовательского GUI 4) в принципе (поправьте ежели не так) можно запустить на *никсах: Wine + Mono ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 12:41 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
iConst... и использовать JSONP. ... Вот тут нарыл примерчик (надо скачать по ссылке вверху страницы, распаковать архив и посмотреть на код в солюшене <UnzipDirectory>\WCFWFCardSpace\WCF\Extensibility\Ajax\JSONP\CS\JSONP.sln). З.Ы. там хост, конечно, IIS-ный, но, я думаю, что можно прикрутить это и к селф-хосту... (вот тут еще немного про jQuery в ту же тему). Если доведете "до ума" этот пример - чиркните сюда пару слов... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 15:57 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
iConst, Вот еще отличный примерчик : тут и селф-хостинг, и json, и GET, и POST... (все в одном флаконе, и что самое замечательное - работает сразу после копи-паста кода со страницы в консольное приложение). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 18:26 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
qu-qu, ОК - обязательно проверю, немного по-позже: день-два, работа появилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2010, 22:56 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
iConst, ну вот, оказывается, что в 4-м фреймворке уже все сделали за нас... (надо только WebHttpBinding использовать): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2010, 10:56 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
qu-qu, Спасибо за пример - я тоже нечто подобное юзал :). Поигрался с сервисами - все неоднозначно. Получается, что ГЕТ- запросы с с паддингом (ваш пример) пользовать можно, а ПОСТ не прокатывает (я это и ожидал :) ) - на уровне браузера это все рубится. То-есть запрос проходит, сервис отвечает, но браузер (ФФ) говорит - нет данных. ИЕ, например, вообще молчит - даже не отправляет. Если писать приложение, то только с заранее "загруженными" данными. Или пользоваться костылями, которые режут данные по 1к и отправляют их ГЕТ-запросами на сервис, где их потом нужно будет собирать :). Еще немного поковыряю - потом отпишу... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2010, 13:11 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Помогите пожалуста, у меня схожая ситуация. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 17:04 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7.
Код: xml 1. 2. 3. 4. 5. 6. 7.
Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
И скрипт ничего не возвращает :( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2012, 17:10 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Ekstrem, Разобрался? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 14:39 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Никто не сталкивался с ошибкой: есть wcf служба, котоаря возвращает json. есть скрипт на jquery , который дергает через POST метод, ссылку wcf службы. запрос отправляется. принимается удачно. отправляется ответ. на клиенте возникает ошибка. срабатывает error обработчик который не содержит информации. ответ уходящий на клиента вполне нормальный: Код: html 1. 2. 3. 4. 5. 6. 7.
вот такой скрипт: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
и код самого сервиса. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
и конфиг: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Не понимаю ошибка в том, что я возвратил данные не того формата или какая то другая ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2012, 16:09 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Я приложил файлик, где wcf host и html страничка с js кодом, который обращается к сервису. У меня все время срабатывает только error обработчик. мои логи http: Запрос: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
ответ: Код: html 1. 2. 3. 4. 5. 6. 7.
Запрос: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Ответ: Код: html 1. 2. 3. 4. 5. 6. 7.
Это дамп из firefox 11. Обращение происходит в два этапа, сначала команда OPTION , так как кроссдоменный запрос, а потом уже сам POST запрос. Собственно все возвращается, только вот jquery вываливает ошибку всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 12:16 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Сам пример с wcf host и html страничкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 12:17 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
даже взяв отсюда пример -> и запустив я увидел что все как бы работает. Только вот там хостинг на IIS. и aspx страничка. Я запустил хост из этой ссылки. Потом запустил простую html страницу с кодом js, который был на aspx страничке. Не заработало. Тоже вываливается в обработчике error. Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 12:47 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
AlexeiKответ уходящий на клиента вполне нормальный: Код: sql 1. 2. 3. 4. 5. 6. 7.
AlexeiK Код: javascript 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 13:50 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Яростный Меч, Не, это не повлияет. Так как этот код из обработчика Success. А тут он всегда на обработчик error выходит. Я еще тут продвинулся на 1 шаг. Приложил пример хоста и клиента. В хосте я перешел на некий enableWebScript. И теперь все мои запросы к хосту распознаются в firebug , он видит что пришел JSOn ответ и все теперь хорошо. Но у скрипта все равно срабатывает error. Код js: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 14:46 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 14:48 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 14:52 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
Заработало. -> тут помощь. странно, я пытался реализовать, это с помощью файла конфигурации, но не получалось. Только кодом создав службу и ее настройки, все получилось, как в том примере. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 16:13 |
|
Call Self-Hosting WCF Service from web-client javascript
|
|||
---|---|---|---|
#18+
AlexeiK, Решилось и с конфигурационным файлом. Я не сделал настройку webhttpbinding. <binding name="NewBinding0" crossDomainScriptAccessEnabled="true" /> вот эту. если false, то ответ JSONP будет типа: Код: html 1. 2. 3. 4. 5. 6. 7.
если true: Код: html 1. 2. 3. 4. 5. 6. 7.
при условии что запрос вида: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Собственно, Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
Нужны для правильной работы с wcf и ajax. Оба варианта приложил. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2012, 16:39 |
|
|
start [/forum/moderation_log.php?user_name=advisordog]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 5227ms |
total: | 5428ms |
0 / 0 |