Каков наилучший способ разработки веб-службы asp.net, которая будет иметь методы, которые возвращают список, отдельные объекты или другие сложные типы данных - PullRequest
0 голосов
/ 27 сентября 2010

Мы используем .Net 2.0 для создания веб-сервисов. Мы хотели бы разработать веб-сервисы в ASP.Net 2.0.

В настоящее время веб-сервисы, которые мы имеем, возвращают либо один параметр, такой как

  <s:element name="ChangePassword">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="currentPassword" type="s:string"/>
        <s:element minOccurs="0" maxOccurs="1" name="newPassword" type="s:string" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:element name="ChangePasswordResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="ChangePasswordResult" type="s:boolean" />
      </s:sequence>
    </s:complexType>
  </s:element>

Мы также разработали веб-сервисы, которые возвращают такую ​​модель, как

  <s:element name="GetCreditBalance">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:element name="GetCreditBalanceResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="GetCreditBalanceResult" type="tns:UserCreditsModel" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:complexType name="UserCreditsModel">
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="UserId" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="CreditBalance" type="s:decimal" />
      <s:element minOccurs="1" maxOccurs="1" name="ValidityDate" type="s:dateTime" />
    </s:sequence>
  </s:complexType>

Мы также разработали веб-сервисы, которые возвращают список моделей, таких как

  <s:element name="GetHistory">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string" />
        <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:element name="GetHistoryResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="GetHistoryResult" type="tns:ArrayOfSMSCreditHistoryModel" />
      </s:sequence>
    </s:complexType>
  </s:element>
  <s:complexType name="ArrayOfSMSCreditHistoryModel">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="unbounded" name="SMSCreditHistoryModel" nillable="true" type="tns:SMSCreditHistoryModel" />
    </s:sequence>
  </s:complexType>
  <s:complexType name="SMSCreditHistoryModel">
    <s:sequence>
      <s:element minOccurs="1" maxOccurs="1" name="CreditHistoryId" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="UserId" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="PaymentDate" type="s:dateTime" />
      <s:element minOccurs="0" maxOccurs="1" name="PaymentRefNo" type="s:string" />
      <s:element minOccurs="1" maxOccurs="1" name="TotalAmount" type="s:decimal" />
      <s:element minOccurs="1" maxOccurs="1" name="CreditsEarned" type="s:int" />
      <s:element minOccurs="1" maxOccurs="1" name="ValidityDate" type="s:dateTime" />
      <s:element minOccurs="0" maxOccurs="1" name="Mode" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="Status" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="ChequeNO" type="s:string" />
      <s:element minOccurs="1" maxOccurs="1" name="ChequeDate" type="s:dateTime" />
      <s:element minOccurs="0" maxOccurs="1" name="ChequeBankName" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="Remarks" type="s:string" />
      <s:element minOccurs="0" maxOccurs="1" name="ValidityDateTime" type="s:string" />
    </s:sequence>
  </s:complexType>

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

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

Будет ли использовать помощь JSON. Возвращение чистого XML поможет.

1 Ответ

0 голосов
/ 27 сентября 2010

Как правило, вы должны выбросить SoapException из веб-службы ASMX, чтобы указать на сбой.Это вернет клиенту сообщение о сбое SOAP.

Однако веб-службы ASMX не имеют надлежащей поддержки для сбоя SOAP.Сгенерированный WSDL не будет указывать вашим клиентам, что ваши операции могут возвращать сбои.Это помешает некоторым клиентам правильно обрабатывать эти ошибки.

Итак, вам действительно нужно перейти на WCF, который решает эту проблему.Ваши альтернативы, если вы должны продолжать использовать .NET 2.0, - это не использовать SoapException или создавать свой собственный WSDL, который должен правильно описывать ошибки, возвращаемые из ваших операций.

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