Использование php веб-службы с C#

Вот мыло wsdl

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

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

Я получаю это для транзакции:

<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, работающим с 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, значение actionCle равно 12708584
когда я использую WS в C#, значение actionClell равно нулю

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

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

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

редактировать: я не могу изменить WS php или wsdl

1 ответ

Решение

Добавьте следующие атрибуты к элементу TransactionsCle в 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. Также имеется ссылка на загружаемый образец.
Другие вопросы по тегам