解惑

解己之惑,解人之惑

2009年7月 (第1页共2页)

电信开始恶心人了

今天Robbin说电信插播全屏广告,我以前也碰到过,但是没有截屏过,刚好今天回来就遇到了。打开FF后刷新我的BLOG,结果:
电信插播全屏广告

经验也会帮倒忙

本来打算那个Notes-all用Google的全套解决方案的,就是用GWT + Google App Engine,看了下GWT的Sample,发现还是比较麻烦,但是感觉思路和ZK还是很像的,就打算比较下GWT和ZK,结果发现有人说可以把ZK成功发布到Google App Engine,试了下,果然是可以的,有兴趣的可以试试(在ZK网站可以下载zk-gae的sample,基于这个很容易建立自己的工程)。
基于我玩过一段时间的ZK,当然用ZK更方便了。
今天把原来的东西复制过去了,在做国际化的时候,用Eclipse编辑properties文件,里面有中文,不能保存,只能保存ISO-8859-1编码的内容。后来想着应该装个插件,下载了,好使,但是运行起来发现并没有把转码的内容显示为正确的中文,很奇怪。后来怀疑ZK读取properties文件的时候和Java读取国际化文件不一样,把properties文件的编码修改为UTF-8,然后直接用文本编辑器输入中文内容,运行测试,正常!
这个就是一般的国际化处理的经验造成的问题。
最后说一下,对ZK的这个违反Java惯例的方式赞一下,因为我一直对Java的这个需要把properties国际化文件用native2ascii转换的过程很鄙视,不知道谁这么设计的。ZK是以UTF-8读取properties文件的,不做任何转换。

更新:
可以修改Eclipse,让它对properties文件不强制使用ISO-8859-1编码保存:
eclipse –> window –> Preferences –> General –> Content Types –> Text –> 单击 Java Properties File,把底部的Default edcodng从ISO-8859-1改成utf-8,然后update。

从Java转向.NET需要注意的问题

从Java转向.NET已经一个多月了,最开始的时候很轻视,因为C#和Java语法相差不多,真正开始写代码开发应用以后才发现很多的不同:

  • 开发工具几乎没得选:Visual Studio,既然用了MS的东西就得都用,否则遇到问题很难得到帮助,因为别人都是用的这一套。
  • Visual Studio给你封装了很多东西,有些开发因此变得很容易,但是也因此不能很灵活可控。而且你很难也往往不需要知道很多底层细节(例如写Web Service的客户端程序,添加一个Service ReferenceVS就会生成代码,根本不需要懂SOAP的细节)。
  • 你需要了解Windows平台的很多东西,例如安全机制,ODBC,Profile等等,而Java是跨平台的,这些配置以及安全等等都是作为jar包的方式引用和使用的,根本不应该依赖Windows内置的机制。
  • .NET有时候会使用很多遗留的东西,例如DLL,COM,而且因为版本不一样不见得好用,而Java比较简单,几乎只有jar,虽然也有版本问题,但是要知道jar里面包含那些类还是很容易的,但是DLL和COM之类的就很麻烦,似乎没有很好的工具帮助你查找哪个DLL或者COM有你需要的类。

现在还是刚刚对.NET有点感觉,没有被搞得头晕脑胀。

最后说一下,如果不是逼不得已,不要转向.NET,Java乱是乱了点,但是资源是大把大把的,而搞.NET,还是跟紧MS吧。

单元测试以Windows集成方式认证的Web Service

如果直接引用Web Service写单元测试,运行以Windows集成方式认证并且不允许匿名访问的Web Service,那么运行的时候会报错,因为权限不够,可能是因为Visual Studio在运行的时候是以匿名用户的身份运行的,而非OS的用户身份,这样的情况需要写些代码来使用OS的用户身份:
        [TestInitialize]
        public void SetUp()
        {
            var basicHttpBinding = new BasicHttpBinding();

            basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

            basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

            var endpoint = new EndpointAddress("http://localhost/IntegrationService/IntegrationService.asmx");

            _client = new IntegrationServiceSoapClient(basicHttpBinding, endpoint);
            _client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

            _client.ChannelFactory.Credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
        }
代码中的EndpointAddress和IntegrationServiceSoapClient要换成你自己的Web Service的对应内容。

更新:
如果按照 Windows平台应用的运行身份的更新中所说的指定用户,那么这里的单元测试就不需要这样麻烦了,直接new一个Client就可以了。

MSBuild没有那么难

希望在脱离Visual Studio的情况下也可以编译我们的.Net工程,根据网上的资料发现MSBuild可以使用sln和*.*proj文件,而sln就是Visual Studio的Solution文件,而每个project都有一个csproj文件,最开始的时候使用MSBuild编译发现不行,说MSBuild支持的文件版本不对,后来发现MSBuild配置的路径是.Net2.0.5的路径,而我们现在使用的其实是3.5版本的.Net,修改MSBuild的路径后发现可以了。
所以如果使用Visual Studio创建的工程,其实它就是用的MSBuild在进行Solution和Project的编译,不用自己再手工写build文件了。

Windows平台应用的运行身份

现在开始做.net的应用了,在Visual Studio里面开发的Web Service直接Debug运行是没有问题,但是publish到IIS以后有问题,在创建的时候出现错误,怀疑是权限问题。
看了下资料,发现IIS应用最终运行的用户是Network Service,而我们的Web Service调用了本地的COM组件,那些组件还会再访问数据库,前面的调用没有问题,但是数据库调用部分就会出错,根据那些资料,有一个所谓的身份模拟的功能,就是说IIS应用最终可以以使用我们的应用的用户身份去调用COM,配置也很简单,在web.config文件的system.web里面添加:
<identity impersonate="true"/>

更新:
这种方式不是非常好,因为会导致传导依赖,以我们自己的项目为例,我们是ASP应用调用另外一个Web Service,那个Web Service再调用我们这个Web Service,如果按照上面配置,那么就得要求有运行COM访问数据库的用户访问ASP,然后ASP以及另外那个Web Service都得配置身份模拟,为了打断这个依赖链条,我们可以在上面的配置的基础上指定一个有COM访问数据库权限的用户,这样其他的应用就不必依赖这个机制了:
<identity impersonate="true" userName="domain\username" password="password"/>

注册了新域名

注册了个新域名,notes-all.com,打算做一个全功能的信息记录网站,最开始的用户当然就是我自己了,自己开发自己用,当然也欢迎大家提出意见。
这个网站计划全面采用Google的解决方案,目前已经全面启用了Google企业套件,应用部分当然也会使用Google App Engine,因为这个应用很简单,不会出现复杂查询,不会有我原来说的问题。
最重要的是,这一切都是免费的。
唯一的顾虑就是Google的这些应用会被屏蔽,所以,在某些情况下,你得知道如何在被屏蔽的情况下继续使用,当然,不被屏蔽是最好的。

ReSharper不错

ReSharper是JetBrains出品的Visual Studio的插件,秉承JetBrains的一贯风格,ReSharper做得确实很不错,在开发应用的时候的提示功能给人的感觉非常的不错,强烈推荐开发.Net应用的人使用。

Twitter引发的问题

前几天刚刚把Twitter集成到自己的blog首页,开始好好的,今天发现我的blog的首页打不开,就找盘古的客服,盘古的客服告诉我我的后台应用没有问题,问我最近几天有没有修改什么,我最近几天并没有修改什么,但是我突然想到Twitter刚刚被GFW封了,于是又试了下其他的页面,发现都没有问题,确定只有首页有问题,应该就是Twitter的问题了。回来后去掉Twitter果然就好了。
不过另外一个令人费解的问题就是,我在公司访问也不行,但是公司没有走国内的网络啊。明天再去公司直接访问Twitter试试。

省了一笔

前几天电脑坏了,无法启动,因为windows的系统文件损坏,提示进行修复。但是光驱有问题,弹不出来。
有个IDE硬盘的USB外壳,把硬盘弄下来发现不能认系统分区,只能认其他的分区,没有办法,打算买一个新电脑,毕竟这个用了5年了,该换个新的了。
不过还是不甘心,拿着起子弄了几下,发现光驱可以用了,赶紧把安装光盘放进去,但是到了选择安装选项的时候发现键盘不好使,怀疑是主板有问题,因为原来好好的键盘就换过一次,开始用的是PS/2的键盘,后来换了个USB的键盘。上新蛋上看了下,不带显示器的主机也有1500左右的,配置也还可以接受(主要就是老婆上网用了)。但是还是不甘心,想着换下主板和CPU就行,去电脑城问了下,主板、CPU和机箱电源加一起也得800块,那还不如换个全新的,后来又怀疑是不是还是键盘有问题?花了20块买了个最便宜的PS/2的键盘,回来一试,果然是键盘的问题,恢复系统,重启后还是不好使,没办法只能重装系统了,也一两年没有重装了,顺带把机器好好的清理了下,CPU的风扇里面积累的那个灰啊!难怪到了夏天经常自动重启的。
就因为这个尝试的态度,用20块省了换新机器的钱。

更早的文章

© 2025 解惑

本主题由Anders Noren提供向上 ↑