PHP-сервер имеет ошибку клиента C # Soap при ссылке на объект, не установленной для экземпляра объекта - PullRequest
0 голосов
/ 12 января 2012

Итак, у меня есть служба PHP Soap, которая запускает nusoap, и я пишу пользовательские ответы.

Клиент php работает отлично, но клиент C # продолжает возвращать следующее:

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

Есть идеи, как решить эту проблему?

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

Спасибо за ваш ввод.

Я использую этот метод.

http://my.execpc.com/~gopalan/dotnet/webservices/webservice_csharp_client.html

Это ошибка, которую я получаю ОШИБКА] ФАТАЛЬНОЕ НЕПРАВИЛЬНОЕ ИСКЛЮЧЕНИЕ: System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта в gt.MainClass.Main (System.String[] args) [0x0005a] в //Projects/gt/Main.cs:27

строке 27 (gt - объект wsdl)

gt.Transact (trans), который я передаюобъект транзакции, и он должен возвращать ответ транзакции, но, похоже, он не анализирует ответ.

[System.Web.Services.вызываемый метод, и это фрагмент кода из частичного класса.

ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Use = System.Web.Services.Description.SoapBindingUse.Literal)][return: System.Xml.Serialization.XmlElementAttribute (IsNullable = true)] public TransactResponse Transact ([System.Xml.Serialization.XmlElementAttribute (IsNullable = true)] TransactRequest запрос) {object [] results = this.Invoke ("Transact", новый объект [] {запрос});return ((TransactResponse) (результаты [0]));}

1 Ответ

0 голосов
/ 20 января 2012

Эта ошибка произошла из-за XML-форматирования ответа.

Итак, в этом сценарии я взял wsdl, сгенерированный C # ASP.NET, и запустил этот wsdl с помощью nusoap на сервере php5 apache. (Это было сделано по запросу клиента на повторную реализацию существующей службы, чтобы ему не пришлось менять свой код.)

Так, например, если у вас есть

<SomeResponse xmlns='some url'>
   < object>
       <element>data</element >
   </object>
</SomeResponse >

Это нужно отформатировать так, чтобы .net правильно проанализировал xml. </p> <pre><code><SomeResponse xmls='some url'> <SomeResult xmlns:a='some url' xmlns:i=''> <a:object> <a:element></a:element> </a:object> </SomeResult> </SomeResposne>

Таким образом, похоже, что данные ответа должны быть инкапсулированы тегом Result, который представляет собой конкатенацию имени функции со строкой «Result». Таким образом, в приведенном выше примере вызываемая функция является функцией Some.

Я не эксперт по XML или мылу, и я точно не знаю, почему это так. Я знаю, что это связано с тегом xmlns: a = 'some url'.

если бы кто-нибудь мог объяснить это лучше, было бы замечательно.

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