Ошибка при вызове веб-служб ASP.NET из Javascript - PullRequest
0 голосов
/ 16 февраля 2009

Я пытаюсь вызвать веб-сервис ASP.NET из Javascript, и он не распознает веб-метод, даже когда я полностью укажу имя, я пытаюсь выяснить, что не так.

Вот часть моего файла web.config:

<httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>

Вот мои объявления веб-службы

[WebService(Namespace = "http://tempuri.org")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class SavingService : System.Web.Services.WebService
{
    [WebMethod]
    public static void SaveToDB(string runCode, string container, 
        string productType, string inspector, string[][] scoregrid, string notes)

и вот javascript (QCApp4 - пространство имен моего проекта):

function PrepToSave()
{
    ....
    QCApp4.SavingService.SaveToDB(codev, containerv, prodtype, inspector, scoregrid, notes);
}

Scoregrid объявляется на стороне js как зубчатый 2d массив с помощью команды Array (). Это было единственное, что меня беспокоило в отношении параметров веб-службы.

А вот сервисный номер:

<asp:ScriptManager id="scriptmng" runat="server">
<Services>
<asp:ServiceReference Path="~/SavingService.asmx" />
</Services>
</asp:ScriptManager>

Я получаю ошибки, независимо от того, вызываю ли я веб-метод напрямую, или вызываю его как SavingService.SaveToDB, или с полными классификаторами. Полученная ошибка говорит о том, что SaveToDB не определен. SavingService не определен, QCApp4 не определен, в зависимости от того, как будет введена первая часть квалифицированного имени.

Я что-то упустил? Я что-то неправильно установил?

Оказывается, я сделал статический WebMethod, конечно, теперь я получаю сообщение об ошибке в консоли ошибок:

Ошибка: [Exception ... "'Sys.Net.WebServiceFailedException: Sys.Net.WebServiceFailedException: сбой метода сервера« SaveToDB »со следующей ошибкой: System.NullReferenceException-- Ссылка на объект не установлена ​​на экземпляр объекта объект «. при вызове метода: [nsIDOMEventListener :: handleEvent] "nsresult:" 0x8057001c (NS_ERROR_XPC_JS_THREW_JS_OBJECT) "location:" "данные: нет]

Ответы [ 2 ]

2 голосов
/ 16 февраля 2009

Если вы установите атрибут InlineScript для элемента ServiceReference, он запишет методы JavaScript, встроенные в HTML, чтобы вы могли точно видеть, что вам нужно вызвать, или если вы вызываете неправильную вещь:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="~/SavingService.asmx" InlineScript="true" />
    </Services>
</asp:ScriptManager>
1 голос
/ 18 февраля 2009

Я испортил две вещи с этим. Я вернулся и нашел видео, которое ранее смотрел, по настройке этих веб-сервисов.

Я понял, что случайно сделал веб-метод статичным, а также забыл добавить параметры метода обратного вызова. После добавления обработчика ошибок «В завершение» и «Вкл.» Он работал нормально, ошибок в консоли ошибок не было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...