2010-02-08 7 views
1

Le problème que j'ai est que le client me envoie une chaîne de données comme un flux. WCF normalise alors (supprime la partie CR de CRLF) et je reçois un décalage de hachage entre le serveur et le client sur cette chaîne spécifique.WCF - paramètre flux est manquant CR de CRLF

public void SomeWcfContract(Stream input) 
    { 
     try 
     { 
      string processed = ReadStream(input); 
      WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK; 
     } 
     catch (Exception ex) 
     { 
      WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError; 
     } 
    } 


    private string ReadStream(Stream input) 
    { 
     string output; 

     using (var reader = new StreamReader(input, Encoding.UTF8)) 
     { 
      output = reader.ReadToEnd(); 
     } 

     return output; 
    } 

Je lis un post sur ce ici: XML deserialization 'standardising' line endings, how to stop it? (.NET)

Il est exactement le même problème que j'ai mais j'utiliser le XmlSerializer niveau de WCF. Ai-je besoin de créer ma propre implémentation XmlSerializer ou puis-je ajouter la « solution » aux paramètres en quelque sorte?

Cela semble être un bug très méchant avec la WCF XmlDictionaryReader ce qui se passe est que lorsque WCF sérialise le flux entrant à un Message tous les cas de retour chariot dans (CRLF) est supprimé et remplacé par LF. Selon this c'est un bug connu dans WCF. EDIT Je l'ai signalé comme un bug à Microsoft: https://connect.microsoft.com/wcf/feedback/details/532196/xmldictionaryreader-is-normalizing-incoming-stream-removing-cr-of-crlf#details

Répondre

1

Cela semble résoudre ce problème:

[WebInvoke(BodyStyle = WebMessageBodyStyle.Bare, 
     UriTemplate = UriTemplates.SomeWcfContract), OperationContract] 
    void SomeWcfContract(Stream vcard); 

Je suppose que cela est logique, car cela provoquerait le paramètre ne doit pas être enveloppé ou quelque chose comme cette.

Questions connexes