2010-09-27 18 views
0

Nous utilisons .Net 2.0 pour créer des services Web. Nous aimerions concevoir des webservices dans ASP.Net 2.0.Quelle est la meilleure façon de développer un service Web asp.net qui aura des méthodes qui renvoient la liste, des objets individuels ou d'autres types de données complexes

Actuellement, les webservices que nous avons le retour soit un seul paramètre comme

<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> 

Nous avons également conçu webservices qui renvoient un modèle comme

<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> 

Nous avons également conçu webservices que retourner une liste de modèles comme

<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> 

L'approche actuelle est que si alors que toute défaillance de fonctionnement comme l'échec d'authentification, nous lançons une exception à la webservice.

Nous aimerions savoir quelle est la meilleure approche pour concevoir un service web afin qu'il puisse être consommé sur différentes plates-formes sans problèmes technologiques.

Utiliserait json help. Est-ce que le retour d'un XML pur va aider.

Répondre

0

En général, vous devez lancer un SoapException à partir d'un service Web ASMX pour signaler une erreur. Cela retournera un message d'erreur SOAP au client. Toutefois, les services Web ASMX ne prennent pas correctement en charge les pannes SOAP. Le WSDL généré n'indiquera pas à vos clients que vos opérations peuvent renvoyer des erreurs. Cela empêchera certains clients de traiter correctement ces fautes. Donc, vous devriez vraiment passer à WCF, ce qui résout ce problème. Vos alternatives, si vous devez continuer à utiliser .NET 2.0, sont de ne pas utiliser SoapException, ou de créer votre propre WSDL, qui devrait décrire correctement les erreurs renvoyées par vos opérations.