Я использую ASP.NET WebForms, что означает, что я буду отправлять данные Protobuf через страницы ASPX или ASHX.
Я пытаюсь создать файл GTFSRT, для которого существует пакет Nuget с именем GTFSRealTimeBindings.При этом используются Protobuf и Protobuf-net для сжатия и отправки данных.
Проблема, с которой я сталкиваюсь, заключается в том, что при отправке данных что-то перемешивается, поэтому их нельзя прочитать на принимающей стороне.и я не уверен, как это исправить.Я думаю, что это в кодировке, но я не устанавливаю это, поэтому я не уверен, как это изменить.
Я закончил тем, что написал http-обработчик (страница Ashx), который загрузит GTFSфайл из другого источника, а затем просто попробуйте переслать его.Я знаю, что файл GTFS можно прочитать и расшифровать из другого источника.Но каждый раз, когда я пытаюсь сервировать файл со своей страницы Ashx, я не могу декодировать объект protbuf. * 1007 *
Вот очень простой набор кодов:
public class Vehicles : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
WebRequest req = HttpWebRequest.Create("https://cdn.mbta.com/realtime/VehiclePositions.pb");
FeedMessage feed = Serializer.Deserialize<FeedMessage>(req.GetResponse().GetResponseStream());
Serializer.Serialize(context.Response.OutputStream, feed);
}
}
В этом фрагменте,вы заметите, что я загружаю файл Protobuf с cdn.mbta.com, затем просто пытаюсь взять полученный результат и передать его обратно.
Когда я пытаюсь прочитать это в моем примере приложения:
WebRequest req = HttpWebRequest.Create("http://localhost:54988/Secure/Admin/Reports/GtfsRt/Vehicles.ashx");
FeedMessage feed = Serializer.Deserialize<FeedMessage>(req.GetResponse().GetResponseStream());
Я получаю следующее сообщение: «Недействительный проводной тип;обычно это означает, что вы перезаписали файл без усечения или установки длины;см. http://stackoverflow.com/q/2152978/23354'
Если я запускаю Fiddler, когда эта страница нажата, я замечаю, что ответ, который я получаю от cdn.mbta.com, отличается от ответа, который дает эта страница (за исключением, конечно, заголовков).
Например, первые две строки на mbta.com в fiddler показывают:
2.0] y1601 "T
Но первые две строки моего ответа: 2,0 Втy1601 "N
Любые идеи о том, что вызывает это, и как я могу это исправить?Я попытался установить кодировку, используя
content.Response.ContentEncoding=Encoding.Utf8
Я и я прошел и попробовал все другие кодировки, чтобы попытаться установить его правильно.
====== ОБНОВЛЕНИЕ ====== В ответ на вопрос Марка я взял строку Base64 полезной нагрузки ответа, и ответ из первого источника не совпадает с ответом после его переадресации.
Ответ от mbta.com(ограничивается первые несколько символов): Cg0KAzIuMBAAGI / e8eIFEl0KBXkwNzIzIlQKHAoIMzkyNTAwNjcqAjg4MAAaCDIwMTkwMjA3IABCDg
1036 * Ответ от моей службы (ограничивается первые несколько символов): CgsKAzIuMBiP3vHiBRJXCgV5MDcyMyJOChgKCDM5MjUwMDY3GggyMDE5MDIwNyoCODgSFA3skilCFQ 1038 * Как вы можете видеть, что они различны.Я буду работать над решением, которое я могу загрузить, чтобы продемонстрировать проблему.Еще раз спасибо!