Тестирование / Сборка статьи MSDN "JSON with Padding (AJAX)" - PullRequest
2 голосов
/ 19 ноября 2010

ОБНОВЛЕНИЕ 3

var local = 'http://localhost:1163/CustomerService.svc/getcustomer?method=?';
            var dev = 'http://yourserver.com/CustomerService.svc/GetCustomer?method=?';
            $.getJSON(dev, function (customer) {    
                alert(customer.Address);
                alert(customer.Name);
            });

если я запускаю http://yourserver.com/CustomerService.svc/getcustomer?method=foo' в удаленном домене, я получаю ошибка отказа в доступе И если я запускаю http://yourserver.com/CustomerService.svc/getcustomer?method=?', я получаю эту ошибку (см. Ниже), и у меня есть именно то, что есть на вашей странице примера , кажется, что "method = foo" "get access denied" и "method =?" выбросить эту ошибку: URI:

"http://yourserver.com/CustomerService.svc.svc/GetCustomer?method=jsonp1290197214042"

Update3

UPDATE2

Я тестировал два разных сценария:

1) отлично работает с localhost

 $.getJSON('http://localhost:1163/service.svc/getcustomer?method=?', function (customer) {
                alert(customer.Address);
                alert(customer.Name); 
            });

2) не работает с междоменной областью

 $.getJSON('http://yourserver.com/CustomerService.svc/getcustomer?method=?', function (customer) {

                alert(customer.Address);
                alert(customer.Name); 
            });

я получаю эту ошибку:

Сообщение: ожидается ';' Строка 1 Char: 11 Код: 0

URI: http://yourserver.com/CustomerService.svc/GetCustomer?method=jsonp1290183992345

UPDATE2

Update1

когда я запускаю сервис в браузере http://yourserver.com/CustomerService.svc/getcustomer я получаю всплывающее окно с просьбой оштрафовать или сохранить файл, поэтому я сохраняю файл в браузере, открываю его в блокноте и вижу, что данные возвращают мне jsonp.

{"Address":"1 Example Way","Name":"Bob"}

где именно вы хотите, чтобы я поместил return false в кнопку?

на отладчике, которую я поставил только для перехода в код.

Update1

UPDATE: ниже показано, как я звоню на мой междоменный сервис.

 $(document).ready(function () {
        $("#driver").click(function (event) {

            $.getJSON('http://yourserver.com/CustomerService.svc/getcustomer?method=?', function (customer) {
            debugger
                alert(customer.Address);
                alert(customer.Name); 
            });
        });
    });

Сведения об ошибке веб-страницы

Пользовательский агент: Mozilla / 4.0 (совместимый; MSIE 8.0; Windows NT 5.1; Trident / 4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729 ; InfoPath.2; MS-RTC LM 8; .NET4.0C; .NET4.0E) Отметка времени: пт, 19 ноября 2010 14:56:22 UTC

Message: Expected ';'
Line: 1
Char: 11
Code: 0
URI: 'http://yourserver.com/CustomerService.svc/GetCustomer?method=JsonPCallBack

я получаю вышеуказанную ошибку:

Конец обновления

Я изучал и строил Web-сервисы JSONP с использованием WCF на fx3.5. Наконец-то я получил пример соединения с помощью этой статьи и статьи MSDN JSON with Padding (AJAX)

я запускаю службу на своем локальном

http://localhost:4058/WiringJsonImpl.svc

чтобы проверить это.

вместо стандартного экрана wsdl отображается сообщение «Публикация метаданных для этой службы в настоящее время отключена»

я вставляю адрес в URL

 http://yourserver.com/LocationService.svc/GetLocation?method=jsonpCallback

и нажмите Enter, я вижу пустой экран с этим сообщением в браузере IE.

The webpage cannot be found 
 HTTP 400  

в моем web.conig я вижу ошибку, но не прекращаю запуск приложения:

 <bindings>
   <customBinding>
    <binding name="jsonpBinding">
     <jsonpMessageEncoding/> //<<<error here
     <httpTransport manualAddressing="true"/>
    </binding>
   </customBinding>
  </bindings>

1 Ответ

4 голосов
/ 19 ноября 2010

В предоставленном примере приложения (JSONP) метод службы называется GetCustomer, а не GetLocation.Чтобы назвать это:

http://localhost:1163/service.svc/getcustomer?method=jsoncallback

, который возвратил следующий ответ в моем браузере:

jsoncallback( {"Address":"1 Example Way","Name":"Bob"} );

Причина, по которой Visual Studio Intellisense подчеркивает <jsonpMessageEncoding/>, заключается в том, что это пользовательская привязкаэлемент, а не часть схемы, и он не известен.Вы можете смело игнорировать это предупреждение.

Единственная проблема в этом образце состоит в том, что файлы упакованы в библиотеке классов, а не в веб-приложении.Для более удобного запуска службы на встроенном сервере Visual Studio вы можете создать новое веб-приложение, скопировать все файлы в это новое приложение и запустить его.Вам просто нужно изменить эту строку в web.config:

<add name="jsonpMessageEncoding"
     type="Microsoft.Ajax.Samples.JsonpBindingExtension, service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                                                            ^

, чтобы включить имя вашего веб-приложения:

<add name="jsonpMessageEncoding"
     type="Microsoft.Ajax.Samples.JsonpBindingExtension, MyWebAppName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                                                              ^

Вот и все.Теперь давайте напишем клиентское приложение, которое использует этот поток JSONP.jquery отлично справляется с методом $.getJSON():

$.getJSON('http://localhost:1163/service.svc/getcustomer?method=?', function(customer) {
    alert(customer.Address); 
});

Я загрузил рабочую версию здесь .

...