2010-02-08 38 views
1

我遇到的問題是客戶端正在向我發送一串數據作爲流。然後,WCF規範化(刪除CRLF的CR部分),並且在該特定字符串上的服務器和客戶端之間發生散列不匹配。WCF - 流參數缺少CRLF的CR

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

我讀了關於這個職位在這裏:XML deserialization 'standardising' line endings, how to stop it? (.NET)

這是完全一樣的問題,我有,但我使用WCF標準XmlSerializer的。我是否需要創建自己的XmlSerializer實現,或者可以以某種方式將「修復」添加到設置中?

這似乎是一個很討厭的錯誤與WCF XmlDictionaryReader發生的事情是,當WCF序列化輸入流的Message的(CRLF)回車所有實例被刪除並替換爲LF。根據this這是WCF中的一個已知錯誤。 編輯我報這個bug微軟:https://connect.microsoft.com/wcf/feedback/details/532196/xmldictionaryreader-is-normalizing-incoming-stream-removing-cr-of-crlf#details

回答

1

這似乎是解決這個問題:

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

我想這是有道理的,因爲這會導致參數不被包裹或類似的東西那。