Вызов веб-сервиса приводит к ошибке «Ссылка на объект не установлена ​​на экземпляр объекта» - PullRequest
0 голосов
/ 04 февраля 2020

Я вызываю конкретный метод c webservice из моего android телефонного приложения, и это всегда приводит к ошибке:

Ссылка на объект не установлена ​​на экземпляр объекта

Я вызываю МНОГИЕ различные методы в этом сервисе без проблем, это единственный, который вызывает у меня проблему, и я не могу отследить ее. webservice написано в VB.NET, телефонное приложение C#. Точки останова подтверждают, что все данные передаются правильно, есть данные NO null.

Я создал систему "log", где я могу записывать сообщения в свою базу данных в определенных местах в моем коде. Сообщения заносятся в базу данных, но метод, по-видимому, выдает ошибки при вызове функции внутри метода. Я настроил веб-сервис, чтобы иметь возможность удаленно тестировать его в производственной среде, и он работает ВСЕ ВРЕМЯ, однако, когда я вызываю его из своего приложения для телефона, я получаю сообщение об ошибке. Я в тупике. Это сообщение об ошибке, которое я получаю:

Источник: System.Web.Services Описание: Серверу не удалось обработать запрос. В экземпляре объекта не задана ссылка на объект. Целевой сайт: System.Object [] ReceiveResponse (System. Net .WebResponse, System.Web.Services.Protocols.SoapClientMessage, System.Web.Services.Protocols.SoapExtension []) Стек вызовов: в System.Web.Services. Protocols.SoapHttpClientProtocol.ReceiveResponse (ответ System. Net .WebResponse, сообщение System.Web.Services.Protocols.SoapClientMessage, расширения System.Web.Services.Protocols.SoapExtension []) 0x001edf0: df5d5fd6: 0d5fd6 .Web.Services. , System.String list3, System.String list4, System.String list5, System.String list6, System.String list7, System.String list8, System.String list9, System.String list10, System.String list11, System.String list12, System.String list12 , System.String list13, System.String list14, System.Stri ng list15, System.String list16, System.String list17, System.String list18, System.String list19) [0x00001] в C: \ Users \ HP \ source \ repos \ Projects \ MyAndroidApp \ MyAndroidApp \ Веб-ссылки \ DataInterfaceWeb \ Reference.cs: 2308 at (обертка remoting-invoke-with-check) MyAndroidApp.DataInterfaceWeb.DataInterface.ProcessSubscription (строка, строка, строка, строка, строка, строка, строка, строка, строка, строка, строка, строка, строка, строка , строка, строка, строка, строка, строка, строка) в MyAndroidApp.Subscription + <> c__DisplayClass24_0.b__1 (отправитель System.Object, System.EventArgs e) [0x001ee] в C: \ Users \ HP \ source \ repos \ Проекты \ MyAndroidApp \ MyAndroidApp \ Subscription.cs: 211

Это веб-метод:

<WebMethod()>
Public Function ProcessSubscription(ByVal list1 As String, ByVal list2 As String,
                               ByVal list3 As String, ByVal list4 As String,
                               ByVal list5 As String, ByVal list6 As String,
                               ByVal list7 As String, ByVal list8 As String,
                               ByVal list9 As String, ByVal list10 As String,
                               ByVal list11 As String, ByVal list12 As String,
                               ByVal list13 As String, ByVal list14 As String,
                               ByVal list15 As String, ByVal list16 As String,
                               ByVal list17 As String, list18 As String, list19 As String) As String
    Dim LogErrors As String = ConfigurationManager.AppSettings("LOG")
    Dim MyResponse As ANetApiResponse
    If LogErrors = "TRUE" Then
        LogError("Processing Subscription") '<-- this line is executed as this message appears in the database
    End If
    Try
        Dim amount As Decimal = Convert.ToDecimal(list16)
        ' I believe that this is the call that causes the error, yet calling 
        ' the method directly via the browser works every time!  Just won't
        ' work when I call the method from the android app.
        MyResponse = ChargeCreditCard.Run(amount.ToString, list11, list12, list19, list3, list4, list6, list7, list8, list9)
    Catch ex As Exception
        LogError(ex.Message) ' <--- never hits this line as nothing is logged after the "Processing subscription" log message
    End Try
    Dim returnmessage As String
    If MyResponse.messages.resultCode = messageTypeEnum.Ok Then
        returnmessage = "SUCCESSFUL"
        PaySubFee(list1, list2, list13)
    Else
        returnmessage = "The card was declined: " & "Error Code: " & MyResponse.messages.message(0).code
    End If

    Return returnmessage 'MyResponse.messages.resultCode ' 0 = ok, 1 = error

    Return result
End Function

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

После нескольких дней и часов после окончания тестирования я смог решить проблему. Я довольно новичок в разработке android приложений, поэтому некоторые вещи, как правило, запоминаются, и одна из них заключается в том, что android по какой-то причине имеет тенденцию добавлять дополнительный пробел, хотя это кажется случайным образом, и в зависимости от ситуации , это может вызвать проблемы. По какой-то прихоти я решил урезать ВСЕ данные, которые передавались при звонке в веб-сервис, и он сразу же начал работать как задумано. Обзор моих журналов не выявил каких-либо лишних пробелов в данных, но тем не менее, как представляется, здесь имеет место. Там, где нет авторизации. NET В технической документации или на форумах есть упоминания о том, что дополнительные пробелы могут вызвать проблемы, но это так. Если в переданной транзакции есть начальные (или завершающие?) Пробелы, controller.GetApiResponse() будет (очевидно) возвращать нулевой ответ. Надеюсь, это поможет кому-то еще, кто испытывает ту же проблему.

0 голосов
/ 04 февраля 2020

Никто не может помочь вам в этой конкретной ошибке без кода и его устранения! Эта ошибка возникает, когда существует объект, который большую часть времени не инициализируется правильно.

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