我一直尝试在我的Windows Azure托管的WCF Restful服务上启用gzip HTTP压缩失败,该服务仅从GET和POST请求返回JSON.
我已经尝试了很多东西,我很难列出所有这些东西,我现在意识到我一直在处理相互矛盾的信息(关于旧版本的天蓝色等),所以最好从干净的石板开始吧!
我正在使用Visual Studio 2008,使用2010年2月的Visual Studio工具.
所以,根据以下链接 ..
..现在已启用HTTP压缩.我已经使用了以下页面中的建议(仅限URL压缩建议).
http://blog.smarx.com/posts/iis-compression-in-windows-azure
<urlCompression doStaticCompression="true"
doDynamicCompression="true"
dynamicCompressionBeforeCache="true"
/>
Run Code Online (Sandbox Code Playgroud)
..但我没有压缩.我不知道urlCompression和httpCompression之间的区别是没有用的.我试图找出但无济于事!
可能,Visual Studio的工具是在支持压缩的Azure版本之前发布的,这是一个问题吗?我已经阅读过某些地方,使用最新的工具,您可以选择在发布时使用哪个版本的Azure OS ...但我不知道这是否属实,如果是,我找不到哪里选择.我可以使用预启用http的版本吗?
我也试过了吹嘘的http压缩模块,但没有结果.
有没有人有关于如何实现这一目标的最新建议?即与当前版本的Azure OS相关的建议.
干杯!
史蒂芬
更新:我编辑了上面的代码来修复web.config片段中的类型.
更新2:测试使用下面的答案显示的URL whatsmyip的答复是表示在没有经过任何压缩正在返回从我service.svc我的JSON响应,但静态的HTML页面ARE被用gzip压缩返回.任何关于如何获得压缩的JSON响应的建议都将非常感谢!
更新3:尝试了大于256KB的JSON响应,以查看问题是否是由于JSON响应小于此,如下面的评论中所述.不幸的是,响应仍然没有被压缩.
我使用以下代码允许用户使用他们的iPhone相机录制视频,然后将其直接上传到我的服务器.我想提出一个限度上的视频,他们可以记录(在这个例子中5秒)的长度,它看起来像使用videoMaximumDuration是这样做的明显的方式,但它没有任何效果.
有没有人有任何想法?
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentModalViewController:imagePicker animated:YES];
imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:imagePicker.sourceType];
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
[imagePicker setVideoMaximumDuration:5];
[imagePicker release];
Run Code Online (Sandbox Code Playgroud)
我已经尝试将allowEditing设置为YES和NO,但它没有任何区别.
谢谢,
史蒂芬
我有一个windows azure部署(一个web角色),根据请求将一对视频文件(mov和mp4)从azure存储器中拉入它自己的本地IIS存储器,然后我可以通过浏览器访问它.
这可能听起来很愚蠢,但我有充分的理由这样做.
不幸的是,我无法访问mp4文件.mov很好,但mp4给我"404 - 找不到文件或目录."
我已经调查了这一点,似乎是因为IIS不会返回未知的文件类型,而mp4必须属于这一类.如果它是一个普通的IIS服务器,我将能够注册mp4 mime类型,但我不知道如何在Windows Azure中进行此操作.
我可以RDP并手动完成,但这不可行,因为角色经常被替换,并且意味着我需要每次都手动重新进行.必须通过其中一个配置文件或代码完成.
有人可以帮忙吗?
谢谢!!
史蒂芬
我有一个在Windows Azure上运行的Web服务,它返回我在iPhone应用程序中使用的JSON.
不幸的是,Windows Azure似乎还不支持动态响应的压缩(长篇故事)所以我决定通过返回一个未压缩的JSON包来解决它,它包含一个压缩的(使用GZIP)字符串.
例如
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
Run Code Online (Sandbox Code Playgroud)
...其中value是以JSON表示的复杂对象的压缩字符串.
这在服务器上很容易实现,但是对于我的生活,我无法弄清楚如何将压缩的NSString解压缩为未压缩的NSString,我可以为zlib等找到的所有示例都处理文件等.
谁能给我任何关于如何做到这一点的线索?(我也很乐意使用deflate的解决方案,因为我可以更改服务器端实现以使用deflate).
谢谢!!
史蒂芬
编辑1: Aaah,我看到ASIHTTPRequest在它的源代码中使用了以下函数:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
Run Code Online (Sandbox Code Playgroud)
...而且我知道我可以将NSString转换为NSData,所以我会看到这是否会引导我到任何地方!
编辑2:不幸的是,编辑1中描述的方法并没有引导我到任何地方.
编辑3:按照下面关于base64编码/解码的建议,我想出了以下代码.您可以猜测编码的GzippedString是一个字符串"Hello,我的名字是Steven Elliott",它被gzip压缩然后转换为base64字符串.不幸的是,使用NSLog打印的结果只是空白.
NSString *encodedGzippedString = @"GgAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPyK+uE6X2SJPiyZ93eaX+TI9Lcuiatvx/wOwYc0HGgAAAA==";
NSData *decodedGzippedData = [NSData dataFromBase64String:encodedGzippedString];
NSData* unGzippedJsonData = [ASIHTTPRequest uncompressZippedData:decodedGzippedData];
NSString* unGzippedJsonString = [[NSString alloc] initWithData:unGzippedJsonData encoding:NSASCIIStringEncoding];
NSLog(@"Result: %@", unGzippedJsonString);
Run Code Online (Sandbox Code Playgroud) 对不起,如果我在这里得到任何错误的术语,但希望你会得到我的意思.
我使用Windows Azure云存储来存储大量的小文件(图像,每个20Kb).
此时,这些文件都存储在根目录中.我知道它不是一个普通的文件系统,所以也许root不是正确的术语.
我试图找到关于这个计划的长期影响的信息,但没有运气,所以如果有人能给我一些信息,我将不胜感激.
基本上,如果存储在这个根目录中的文件数量达到数十万/百万,我会遇到问题吗?
谢谢,
史蒂芬
我在某些依赖于子查询的查询上遇到了一个奇怪的问题。它们运行得快如闪电,直到我在子查询中使用 UNION 语句。然后他们就无休无止地跑,我10分钟后就给了。我现在描述的场景不是我一开始的场景,但我认为它消除了很多可能的问题,但却产生了同样的问题。因此,即使这是一个毫无意义的问题,请耐心等待!
\n\n我有一张桌子:
\n\ntblUser - 100,000 rows\ntblFavourites - 200,000 rows\n
Run Code Online (Sandbox Code Playgroud)\n\n如果我执行:
\n\nSELECT COUNT(*) \nFROM tblFavourites \nWHERE userID NOT IN (SELECT uid FROM tblUser); \n
Run Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 然后它运行不到一秒钟。但是,如果我修改它以使子查询具有 UNION,它将运行至少 10 分钟(在我放弃之前!)
\n\nSELECT COUNT(*) \nFROM tblFavourites \nWHERE userID NOT IN (SELECT uid FROM tblUser UNION SELECT uid FROM tblUser); \n
Run Code Online (Sandbox Code Playgroud)\n\n这是毫无意义的改变,但它应该产生相同的结果,我不明白为什么它应该花更长的时间?
\n\n将子查询放入视图中并调用它具有相同的效果。
\n\n有什么想法吗?我正在使用 SQL Azure。
\n\n问题解决了。请参阅下面我的回答。
\n\n我在这里写自己的问题和答案,因为在stackoverflow上有几十个,并且都有不同的答案,其中没有一个对我有用.
因此,自推出新的iTunes Connect以来已有好几个月了,对于很多人来说,仍然无法拒绝您自己的二进制文件以便您可以替换它,例如,如果您上传二进制文件,状态将更改为"等待审核"然后你意识到你有一个bug,所以想上传一个新的二进制文件.
对于很多人来说,屏幕上没有按钮/链接/任何东西可以修改二进制文件.
我有自己的答案,我现在会发布,但这是一个彻头彻尾的黑客,所以如果其他人有一个确定的火和更清洁的方式处理苹果迫使我们的系统的噩梦,请发布!
编辑
遗憾的是,这不起作用,即使iTunes Connect上的所有内容都显示新的内容已经过审核,旧版本也会发布.本文评论中的更多细节.
我正在使用GreenDroid开发Android应用程序.该应用程序仅用于测试atm,因此它包含的是一个带有刷新按钮的ActionBar,三个选项卡以及每个选项卡的活动.
当我在ActionBar上按下刷新按钮时,我正在尝试实现的所有功能都显示一个Toast消息,但是我希望从我的一个活动中调用toast消息,我们将其称为Listener1Activity,这是位于第一个选项卡中的活动......这是因为当按下ActionBar按钮时,Listener1Activity最终将包含我想要重新加载的列表,如果我现在可以使用简单的Toast消息,那么我可以理清后来.
我已经研究过意图,广播,但似乎没什么好看的.
每次按下按钮时我都不希望活动开始新,我只想要一个方法来调用并显示吐司.
所以基本上,就像有两个活动同时运行一样,一个按钮按下另一个调用方法.不是吗?或者我弄错了?
SenderActivity和Listener1Activity.
在iOS中,我只是从SenderActivity发送NSNotification,并在Listener1Activity中添加一个观察者.在Android中实现这一目标的最佳方法是什么?
谢谢!
史蒂芬
我很抱歉问这么简单的问题,但这是一个我无法找到答案的具体问题.
我不是本地的Objective-c程序员,所以如果我使用任何C#术语我会道歉!
如果我在test.h中定义一个对象
@interface test : something {
NSString *_testString;
}
Run Code Online (Sandbox Code Playgroud)
然后在test.m中初始化它
-(id)init {
_testString = [[NSString alloc] initWithString:@"hello"];
}
Run Code Online (Sandbox Code Playgroud)
然后我明白我会在dealloc中释放它,因为每个init都应该有一个版本
-(void)dealloc {
[_testString release];
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要澄清的是,如果在init中,我使用其中一种快捷方法创建对象,我还是会在dealloc中释放它吗?这不会破坏"一个发布一个init"规则吗?例如
-(id)init {
_testString = [NSString stringWithString:@"hello"];
}
Run Code Online (Sandbox Code Playgroud) azure ×3
iphone ×3
objective-c ×3
gzip ×2
ios ×2
android ×1
app-store ×1
c# ×1
deflate ×1
greendroid ×1
iis ×1
ios4 ×1
java ×1
json ×1
mime-types ×1
sql ×1
sql-server ×1
t-sql ×1
xcode ×1