WCF - в параметре потока отсутствует CR CRLF - PullRequest
1 голос
/ 08 февраля 2010

У меня проблема в том, что клиент отправляет мне строку данных в виде потока. Затем WCF нормализует (удаляет CR-часть 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;
    }

Я прочитал пост об этом здесь: XML десериализация «стандартизация» окончаний строк, как это остановить? (.NET)

У меня точно такая же проблема, но я использую стандартный XmlSerializer WCF. Нужно ли создавать собственную реализацию XmlSerializer или я могу как-то добавить «исправление» в настройки?

Это кажется ОЧЕНЬ неприятной ошибкой с WCF XmlDictionaryReader , что происходит, когда WCF сериализует входящий поток в Сообщение , все случаи возврата каретки в (CRLF) снято и заменено на НЧ. Согласно это это известная ошибка в WCF. РЕДАКТИРОВАТЬ Я сообщил об этом в Microsoft как об ошибке: https://connect.microsoft.com/wcf/feedback/details/532196/xmldictionaryreader-is-normalizing-incoming-stream-removing-cr-of-crlf#details

1 Ответ

1 голос
/ 09 февраля 2010

Это, похоже, решает эту проблему:

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

Полагаю, это имеет смысл, поскольку это приведет к тому, что параметр не будет перенесен или что-то подобное.

...