Использование php веб-службы с C # - PullRequest
2 голосов
/ 22 марта 2012

вот поле мыла wsdl

<element name="transactionCle" nillable="true" type="xsd:int"/>  

, когда я вызываю WS в PHP и показываю мыло с __getLastResponse()

, которое я получаю для транзакцииCle:

<transactionCle href="#id50"/>

вот ссылка на поле:

<multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" id="id50" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int">12708584</multiRef>

Я добавил новую WebReference к wsdl, предоставленному Apache Server, работающим с php.
Сгенерированный прокси-класс дает мне дляполе:

private System.Nullable<int> transactionCleField;

/// <remarks/>
        [System.Xml.Serialization.SoapElementAttribute(IsNullable=true)]
        public System.Nullable<int> transactionCle {
            get {
                return this.transactionCleField;
            }
            set {
                this.transactionCleField = value;
            }
        }

Теперь моя проблема:

Когда я использую WS в php, значениеactionClee равно 12708584
, когда я использую WS в C #, значениеofactionClell равен нулю

Если я вручную изменю класс прокси с System.Nullable на int, а теперь C # даст мне Good Value (12708584).

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

Вот мой вопрос: как я могу:
или установить длявестерство транзакции как intнапечатать без изменения прокси-класса?
или заставить сериализацию дать мне хорошее значение?

edit: я не могу изменить php WS или wsdl

1 Ответ

1 голос
/ 28 марта 2012

Добавьте следующие атрибуты для элементаactionCle в wsdl

minOccurs="1" maxOccurs="1" 

Затем регенерируйте прокси. Если это поможет, тогда вы можете сделать три вещи:

  1. изменить сгенерированный прокси вручную (что вы уже упоминали, вы не будете)
  2. попросить владельца WS расширить сгенерированный wsdl. Это обеспечит .net-совместимость веб-сервиса
  3. создайте свой собственный прокси-генератор, переопределив методы SchemaImporterExtension. Посмотрите здесь: http://msdn.microsoft.com/en-us/library/system.xml.serialization.advanced.schemaimporterextension.aspx. Также имеется ссылка на загружаемый образец.
...