2013-03-11 2 views
1

Voici ce que mon service WCF doit renvoyer. Lorsque je commande PaymentData hors de ResponseModel et que j'ajoute d'autres DataMembers dans cette classe cela fonctionne.WCF Une erreur s'est produite lors de la réception de la réponse HTTP

[DataContract] 
public class ResponseModel 
{ 
    [DataMember] 
    public PaymentData PaymentData { get; set; } 
} 

est ici la classe PaymentData:

[DataContract] 
public class PaymentData 
{ 
    [DataMember] 
    public PaymentType PaymentType { get; set; } 
    [DataMember] 
    public string CardNumber { get; set; } 
    [DataMember] 
    public DateTime ExpirationDate { get; set; } 
    /// <summary> 
    /// If true, then the CardNumber property will contain the token 
    /// </summary> 
    [DataMember] 
    public bool IsCardNumberTokenized { get; set; } 
    /// <summary> 
    /// Number on back of credit cards. This value CANNOT be stored anywhere 
    /// </summary> 
    [DataMember] 
    public string CardSecurityValue { get; set; } 
    [DataMember] 
    public CardSecurityPresence CardSecurityPresence { get; set; } 
} 

... et les énumérations définies dans la classe PaymentData

[DataContract(Name = "CardSecurityPresenceEnum")] 
public enum CardSecurityPresence 
{ 
    [EnumMember(Value = "1")] 
    IsPresent = 1, 
    [EnumMember(Value = "2")] 
    Illegible = 2, 
    [EnumMember(Value = "9")] 
    NoCodeOnCard = 9, 
    [EnumMember(Value = " ")] 
    NotSent 
} 

[DataContract(Name = "PaymentTypeEnum")] 
public enum PaymentType 
{ 
    [EnumMember] 
    Visa = CMPWSApiService.TransactionMop.VI, 
    [EnumMember] 
    MasterCard = CMPWSApiService.TransactionMop.MC, 
    [EnumMember] 
    AmericanExpress = CMPWSApiService.TransactionMop.AX, 
    [EnumMember] 
    Discover = CMPWSApiService.TransactionMop.DI, 
    [EnumMember] 
    PayPal = CMPWSApiService.TransactionMop.PP, 
    [EnumMember] 
    BillMeLater = CMPWSApiService.TransactionMop.BL 
} 

Ne la sérialisation pas comme que mes noms de variables ont les mêmes noms comme leurs classes?

est ici l'erreur du client WCFTest:

Une erreur est survenue lors de la réception de la réponse HTTP à [url service omis]. Ce peut être dû à la liaison de point de terminaison de service n'utilisant pas le protocole HTTP . Cela peut également être dû à un contexte de requête HTTP abandonné par le serveur (probablement en raison de l'arrêt du service). Voir les journaux du serveur pour plus de détails.

trace de pile du serveur: à System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException WebException, HttpWebRequest demande, HttpAbortReason abortReason)
à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan délai d'attente) à System.ServiceModel.Channels.RequestChannel.Request (Message message, délai d'attente TimeSpan) à System.ServiceModel.Dispatcher.RequestChannelBinder.Request (message message , délai d'attente TimeSpan) à System.ServiceModel.Channels.Serv iceChannel.Call (Action String, unidirectionnel booléenne, l'opération ProxyOperationRuntime, objet [] ins, Object [] out, temporisation TimeSpan) à System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, opération ProxyOperationRuntime) au système .ServiceModel.Channels.ServiceChannelProxy.Invoke (message IMessage )

Exception relancée à [0] à System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) à System.Runtime .Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & MSGDATA, le type Int32) à ICreditCardService.TestAuth() à CreditCardServiceClient.TestAuth()

d'exception interne: La connexion sous-jacente a été fermée: une erreur inattendue produite sur une réception. à System.Net.HttpWebRequest.GetResponse() à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (timeout TimeSpan )

d'exception interne: impossible à lire les données de la connexion de transport: un existant la connexion a été forcée par l'hôte distant. au System.Net.Sockets.NetworkStream.Read (byte [] buffer, Int32 offset, taille Int32) à System.Net.PooledStream.Read (tampon byte [], Int32 offset, taille Int32) à System.Net.Connection.SyncRead (demande HttpWebRequest, Boolean userRetrievedStream, Boolean probeRead)

exception interne: une connexion existante a été fermée force par l'hôte distant au tampon System.Net.Sockets.Socket.Receive (byte [], Int32 offset, taille Int32, SocketFlags SocketFlags) à System.Net.Sockets.NetworkStream.Read (octet [] tampon, décalage Int32, taille Int32)

+0

Il semble provenir de CardSecurityPresenceEnum. Quand je commente cela, ça marche. Pourquoi cette énumération me donne-t-elle des problèmes? –

+0

Apparemment, je dois définir NotSent à quelque chose. –

Répondre

1

Dans CardSecurityPresenceEnum, j'avais un membre enum appelé "NotSent" qui n'était pas initialisé à une valeur. Pour une raison quelconque, cela a été suspendu.

Questions connexes