Ошибка использования веб-службы .NET с помощью jQuery - PullRequest
0 голосов
/ 06 февраля 2012

Я пытаюсь получить доступ к веб-службе .Net (.asmx), которую я создал и которая работает в этом месте: http://sebtest.somee.com/page/webservice/PositionService.asmx

Вызов службы локально работает нормально, но, к сожалению, использование его с помощью jQuery на сервере не удается. Услуга написана следующим образом:

namespace WcfService1
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// Below line allows the web service to be called through HTTP protocol.
[ScriptService]
public class ServiceImpl : System.Web.Services.WebService, IService1j
{

    [WebMethod]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
    public PositionReturnType getLastLocation(){
        .
        .

Я также создал веб-страницу asp.net, которая при запуске напрямую пытается получить доступ к методу getLastLocation. Страницу можно найти здесь: http://sebtest.somee.com/page/

Как видите, я получаю только ошибку.

Код веб-страницы:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
<title>Call web service test</title>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>

<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.min.js"></script>

<script type="text/javascript">

    function CallService() {

        $.ajax({
            type: "POST",
            url: "http://sebtest.somee.com/page/webservice/PositionService.asmx?op=getLastLocation",
            dataType: "json",
            success: function (data, textStatus, jqXHR) {
                alert('worked');
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(jqXHR + ' - ' + textStatus + ' - ' + errorThrown);
            }
        });

     }
</script>
</head>
<body onload="CallService()">
<form runat="server">

Я понял, что в большинстве примеров используется форма URL «Имя службы / метода», на которую моя служба не отвечает. Вместо этого метод можно просмотреть по адресу sebtest.somee.com/page/webservice/PositionService.asmx?op=getLastLocation. Может ли это быть какой-то проблемой?

Буду рад любой помощи, которую вы можете оказать мне! Может быть, вы могли бы привести пример, позвонив в мою службу.

Заранее большое спасибо за помощь:)

Себастьян


Редактировать: теперь я понял, что могу вручную открыть веб-сервис для запросов HTTP Get и HTTP Post, изменив файл web.config. Я сделал это и попытался получить доступ к веб-сервису сейчас с веб-страницы, работающей локально на моем рабочем столе, следующим образом:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

<script type="text/javascript">

    function CallService() {

        $.ajax({
            type: "GET",
            url: "http://sebtest.somee.com/page/webservice/PositionService.asmx/getLastLocation?",
            dataType: "xml",
            error: function (xhr, textStatus, errorThrown) {
                alert('nooo ' + xhr + ' - ' + textStatus + ' - ' + errorThrown);
            },
            success: function (data, textStatus, jqXHR) {
                alert('jaaa ' + data + " - " + textStatus + " - " + jqXHR);
            }
        });

     }

К сожалению, это по-прежнему приводит к вызову функции ошибки. В chrome текст ошибки не отображается, IE говорит: «Нет транспорта». Тем не менее, я также использовал Fiddler2, и там я получаю следующий ответ, который именно то, что мне нужно:

HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 07 Feb 2012 13:06:37 GMT
Content-Length: 266

<?xml version="1.0" encoding="utf-8"?>
<PositionReturnType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<longtitude>3</longtitude>
<latitude>9</latitude>
</PositionReturnType>

Может быть, это поможет вам разобраться в моей проблеме? Я имею в виду, очевидно, что данные возвращаются правильно, как и ожидалось, на мой настольный компьютер, но вместо успешного вызывается функция ошибки.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Я действительно не нашел ответа на свои проблемы, но вместо этого я использовал другой подход, который описан здесь (http://www.codeproject.com/Articles/223572/Calling-Cross-Domain-WCF-service-using-Jquery-Java) и работает отлично.

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

<?xml version="1.0"?>
<configuration>

<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="None">
</authentication>
</system.web>
<system.serviceModel>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<standardEndpoints>
  <webScriptEndpoint>
    <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
  </webScriptEndpoint>
</standardEndpoints>

<behaviors>
  <serviceBehaviors>
    <behavior>
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

0 голосов
/ 06 февраля 2012

Измените ваш URL на "http://sebtest.somee.com/page/webservice/PositionService.asmx/getLastLocation" и посмотрите, подходит ли вам это.

...