Первый элемент отсутствует при использовании Stream в качестве входных данных в wcf rest service C# - PullRequest
0 голосов
/ 09 января 2020

У меня есть служба отдыха wcf с Stream в качестве входного параметра:

    [OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    void ImportStream(Stream data);

Мой код:

 public void ImportStream(Stream data)
    {
        if (data.ReadByte() != -1)
        {                
            using (var reader = new StreamReader(data))
            {                               
                string textRead = reader.ReadToEnd();
            }
        }
}

И это мой текст в качестве ввода в POSTMAN:

D_CA,P_AMOUNT,D_AN,D_PE,D_RU,D_ORU,D_AC,,D_GO,D_LE,D_NU,D_CO,D_MU,D_PMU,D_DP,P_COMMENT                              
A,100,,2019.12,S000,S000,XA1810,F00,PACK01,,S002,EUR,ORIG07-01,0000.PACKAGE,,,,,,2019.12,           
A,100,,2019.12,S000,S000,XA1810,F00,PACK01,,S004,EUR,ORIG07-01,0000.PACKAGE,,,,,,2019.12, 

В результате у меня есть textRead:

"_CA,P_AMOUNT,D_AN,D_PE,D_RU,D_ORU,D_AC,,D_GO,D_LE,D_NU,D_CO,D_MU,D_PMU,D_DP,P_COMMENT     ....... "

Как вы видите, первый символ "D" отсутствует!?

Как это исправить? Спасибо

1 Ответ

0 голосов
/ 09 января 2020

Проблема с ReadBytes, если см. Документацию

Метод FileStream.ReadByte

Считывает байт из файла и продвигает позицию чтения на один байт.

Установить позицию потока в начало файла.

 public void ImportStream(Stream data)
    {
        if (data.ReadByte() != -1)
        {    
            data.Seek(0, SeekOrigin.Begin);            
            using (var reader = new StreamReader(data))
            {                               
                string textRead = reader.ReadToEnd();
            }
        }
}
...