Как отправить объект в службу C # WCF из PHP с помощью SOAP - PullRequest
1 голос
/ 21 июля 2010

У меня проблемы с отправкой пользовательского объекта, который определен как контракт данных в моем веб-сервисе WCF из PHP.Я пытаюсь сделать это с помощью SOAP.

Вот как выглядит dataContract:

[DataContract]
    public class simplyCustomer
    {
        [DataMember]
        public int id;
        [DataMember]
        public string name;
        [DataMember]
        public string contact;
        [DataMember]
        public string street1;
        [DataMember]
        public string street2;
        [DataMember]
        public string city;
        [DataMember]
        ...
    }

Итак, у меня есть функция, которая принимает просто Customer в качестве параметра службы WCF.PHP может получить simplyCustomer просто отлично, используя другую функцию, которая возвращает один.Однако, если я вызываю тот, который принимает его, используя этот код в PHP:

$retVal = $simplyService->__soapCall("addCustomer",array('parameters'=>$params));

Конверт SOAP, который генерирует этот вызов, оставляет объект NULL, в результате чего служба WCF жалуется на нулевую ссылку.1011 * Вот сгенерированный конверт:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"><SOAP-ENV:Body><ns1:addCustomer/></SOAP-ENV:Body></SOAP-ENV:Envelope>

Параметры должны быть там, где addCustomer, но там ничего нет.

Любая помощь будет принята с благодарностью!

Спасибо!

Ответы [ 3 ]

0 голосов
/ 04 марта 2013

Хотя об этом уже спрашивали, подумал добавить мой вклад, поскольку я пришел по той же проблеме.

Предполагается, что ваш контракт на эксплуатацию выглядит примерно так, как вы предлагали

[OperationContract]    
public <return_type> addCustomer(simplyCustomer parameters);

должен работать, учитывая, что $ params получил все необходимые значения, установленные при инициализации, где бы это ни происходило, и имена переменных в точности совпадают с контрактом данных .

Хотя несколько советов по этому вопросу пройдут.

1) Если вам удалось отправить объект в службу, можно проверить журналы службы, чтобы увидеть, что пошло не так.

2) Просто проверьте ваш конструктор, чтобы увидеть, что все параметры установлены.

3) Также хорошо проверить, что мыльный клиент инициализирован и потреблен правильно.

например: (далее - одна из многих возможностей)

$client = new Client( $baseUrl, array('soap_version' => SOAP_1_1,));
$result = $client->addCustomer(array("parameters" => $params ));
0 голосов
/ 03 мая 2013

У меня была такая же проблема.Не могу понять, как вы построили свои $ params, но я решил свои, выполнив следующее:

$username = "test";
$password = "test";

$input = array ("composite" => array("Password" => $password, "UserName" => $username));

$result=$client->__SoapCall('AuthenticateUser',array('parameters'=>$input));

Мой метод обслуживания выглядит следующим образом

[OperationContract]
AuthenticationData AuthenticateUser(AuthenticationData composite);

Использование Fiddler - хорошая помощь при выяснении того, какпостроить свой материал мыла

0 голосов
/ 14 декабря 2010

Я столкнулся с той же проблемой при создании частного проекта.

Мое решение состояло в том, чтобы использовать T4 для генерации прокси-серверов службы и данных, возможно, вы найдете это полезным.Напишите мне, если у вас есть какие-либо вопросы, шаблоны не протестированы в полном объеме.

Вы найдете шаблоны на github, включая примеры сервисных контрактов / контрактов данных:

https://github.com/schaermu/wcf-phpclient-t4

не стесняйтесь раскошелиться на проект!

ура

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