Исправление сломанного прокси-класса

1

Я пытаюсь обновить некоторый код WSE для использования WCF, и у меня возникают проблемы с одной услугой в частности. Когда я создавал свой прокси-класс из WSDL, он создает методы без параметров или возвращаемого типа. Параметры были достаточно легкими для исправления - сохранили автоматически созданный файл References.cs как новый файл, добавили параметр как к сгенерированному интерфейсу, так и к сгенерированному клиенту, и он работает. Используя Fiddler, я вижу, что трафик как ожидалось.

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

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

Метод в клиенте (это используется для возврата void, я установил его для object[] в надежде, что смогу получить что-то, что я мог бы сделать):

public object[] getAddress(string user) {
    return base.Channel.getAddress(user);
}

Метод в интерфейсе:

[System.ServiceModel.OperationContractAttribute(Action = "https://xxxxxx/Address#getAddress", ReplyAction = "*")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
object[] getAddress(string user);

Необработанный ответ XML (отредактированный) выглядит примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getAddressResponse xmlns="https://xxxxx/Address">
       <ArrayOfAddress arrayType="xsd:Address[3]" soapenc:arrayType="xsd:anyType[3]" xsi:type="Array">
        <Address>
          <street xsi:type="xsd:string">3rd</street>
        </Address>
        <Address>
          <street xsi:type="xsd:string">1st</street>
        </Address>
        <Address>
          <street xsi:type="xsd:string">2nd</street>
        </Address>
      </ArrayOfAddress>
    </getAddressResponse>
   </soap:Body>

Заранее спасибо!

EDIT: мне не удалось решить эту проблему, и на этой службе есть всего несколько методов, поэтому я просто вручную взаимодействовал с сервисом с помощью WebClient, минуя WCF.

  • 0
    Что бы метод в идеале вернул?
  • 0
    Я добавил ответ XML на вопрос. Я планировал структурировать структуру классов, близкую к этой структуре данных.
Показать ещё 2 комментария
Теги:
web-services
wcf

1 ответ

0

Возвращаемый объект [] не даст вам то, что вы можете сделать. WCF для клиента должен знать возможные конкретные типы для десериализации ответа. Я бы ожидал исключения.

Чтобы исправить это, вы должны пойти дальше и создать класс контракта данных адреса.

  • 0
    К сожалению, я тоже попробовал, но безуспешно. Я также ожидал бы исключения; эта часть озадачивает меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню