草庐IT

c# - iOS 和 .NET WebAPI 之间的数据压缩

coder 2023-09-28 原文

iOS App.NET WebApi 需要同步大量数据或记录。

我们需要在 iOS 和 .NET WebApi 上进行内存压缩,这将压缩解压缩数据,然后进一步处理。

在 iOS 应用端,我们计划使用类似下面的东西在内存中使用 GZip 压缩-

http://www.clintharris.net/2009/how-to-gzip-data-in-memory-using-objective-c/

http://www.deusty.com/2007/07/gzip-compressiondecompression.html

在 .Net WebApi 方面,我们计划使用 GZip 压缩进行开发,使用 - https://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream%28v=vs.110%29.aspx

现在我的问题是-

是否可以使用.Net中的GZipStream类来压缩JSON字符串?在 .Net 中,数据将从数据库中提取到模型中,然后模型将被转换为 JSON 字符串,然后在发送到设备之前需要压缩该字符串,并且在从 iOS 应用程序接收数据时将遵循相同的逆过程。

除上述我们计划的方法外,还有其他最佳方法吗?任何技术建议、相关链接或一些示例代码片段都会非常有帮助。

解决方案: 感谢@puneet 领导这篇文章以获得适当的解决方案。

因为我的服务器应用程序是一个 Asp.Net WebAPI,并且没有任何文件(html、css、js 等)可以像任何传统网站那样从服务器传输到浏览器。 http://forums.asp.net/t/1771770.aspx

因此,自动 IIS 压缩在我的情况下不起作用,可以按照此处给出的步骤启用它 - http://www.codeproject.com/Articles/186233/Utilize-gzip-compression-in-IIS

在我的例子中,需要处理 GZip 请求和响应,为此需要单独的处理程序,在这种情况下,我将遵循以下 SO 帖子-

压缩:Compress HTTP GET Response

解压:How do enable a .Net web-API to accept g-ziped posts

另一个值得一提的链接- http://benfoster.io/blog/aspnet-web-api-compression

最佳答案

是否可以使用 .Net 中的 GZipStream 类来压缩 JSON 字符串?在 .Net 中,数据将从数据库中提取到模型中,然后模型将被转换为 JSON 字符串,然后在发送到设备之前需要压缩该字符串

是的,可以通过两种方式实现。

  1. 通过启用动态压缩让 IIS 自行处理。
  2. 编写自己的代码来压缩响应

请按照this的回答两个选项的线程。

我尝试了第二种方式(使用引用线程答案中给出的代码)并且它对我非常有效。

从 iOS 应用程序接收数据时将遵循相同的逆过程。

是的,我们可以解压缩 gZip 压缩后的数据。 [这篇博文] ( http://blog.kaliatech.com/2013/02/posting-compressed-json-content-to-asp-net-web-api-controller/ ) 有相同的代码。 我还没有尝试过这个,但它看起来不错并且应该可以工作。

关于c# - iOS 和 .NET WebAPI 之间的数据压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28847518/

有关c# - iOS 和 .NET WebAPI 之间的数据压缩的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  4. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  8. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  9. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  10. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

随机推荐