В моей WCF форматировщиком, у меня есть Base64
Содержимое обернутый в XML-элемент <Binary>...</Binary>
Ошибка XmlReader.ReadContentAsBase64(). Ожидаемые данные в кодировке Base64. Найдено Концевой элемент
Мой код:
bodyReader.ReadFullStartElement("Binary");
byte[] rawBody = bodyReader.ReadContentAsBase64();
терпит неудачу с Exception:
«System.Xml.XmlException: Base64 кодированные данные ожидалось. Найдено Концевой элемент '' из пространства имен ''.
Чтобы быть точным 'bodyReader' является XmlDictionaryReader.
ReadContentAsBase64() @ MSDN
ReadFullStartElement() @MSDN
Удивительно, но следующий обходной работы:
bodyReader.ReadFullStartElement("Binary");
string b64 = bodyReader.ReadContentAsString();
rawBody = Convert.FromBase64String(b64);
хотя это Обходной путь хорошо для меня,
Я хотел бы знать, что я делаю неправильно?
Edit:
Попробовал воспроизвести на минимальный примере, хотя в следующем примере ошибки
Примечания: строка Base64 является один неисправной на DispatchFormatter
private void TestXmlDictionaryReader()
{
string base64 = @"ewpjbGFzc05hbWU6ICJFYmF5IiwKc2hvcE5hbWU6ICJUb21lclNCIgp2YWx1ZTo1Cn0=";
string s = @"<Binary>ewpjbGFzc05hbWU6ICJFYmF5IiwKc2hvcE5hbWU6ICJUb21lclNCIgp2YWx1ZTo1Cn0=</Binary>";
StringReader sr = new StringReader(s);
var xr = XmlReader.Create(sr);
var xmlDictRdr = XmlDictionaryReader.CreateDictionaryReader(xr);
xr.ReadStartElement("Binary");
byte[] buff = new byte[5000];
xr.ReadContentAsBase64(buff, 0, 0);
}
2 вещи, ReadContentAsBase64
подпись отличается.
Minimal воспроизводимого Пример , потому что она не работает как простой метод, я создал базовый проект WCF с моим (Crippled) диспетчерским форматировщиком: Here on my GoogleDrive
Места Breakpoint @NewtonsoftJsonDispatchFormatter.cs
линия 42.
42: var bodyReader = message.GetReaderAtBodyContents();
43: bodyReader.ReadStartElement("Binary");
44: byte[] rawBody = bodyReader.ReadContentAsBase64();
использовать любой метод для отправки запроса POST к вашим услугам:
POST /Service1.svc/GetData HTTP/1.1
Host: localhost:1227
Cache-Control: no-cache
Postman-Token: 6d7141b8-c6c8-a9c1-f669-06c3c0ccd5e2
{
className: "Ebay",
shopName: "TomerSB"
value:5
}
Не существует метода 'ReadFullStartElement' метода [' XmlReader'] (https://msdn.microsoft.com/en-us/library/system.xml.xmlreader (v = vs.110) .aspx). Кроме того, ['ReadContentAsBase64'] (https://msdn.microsoft.com/en-us/library/system.xml.xmlreader.readcontentasbase64 (v = vs.110) .aspx) имеет аргументы. Можете ли вы предоставить [mcve] для своей проблемы? – dbc
Сделаю, как только я доберусь до своего компьютера. –
Я не могу воспроизвести проблему. Вот [скрипка] (https://dotnetfiddle.net/AfbvfE), показывающая мою попытку. Обратите внимание, что скрипта не компилируется, потому что dotnetfiddle не ссылается в DLL, которая содержит 'XmlDictionaryReader', но если вы запустите код в VIsual Studio, вы увидите, что тестовый код успешно пройдет. Можете ли вы предоставить полный [mcve], включая XML? – dbc