2007年3月12日
WebServices是无状态,不能通过所谓得属性来保存信息.
在做一个小功能得时候因为不知道而产生了很多无谓得错误和调试,后来经过几多调试,得出经验
通过Session来保存状态
而在WebServices中使用Session必须开启EnableSession
且客户端必须创建CookieContainer实例来进行关联
具体做法:
服务端
using System.ComponentModel;
using System.Web.Services;
namespace test
{
/// <summary>
/// Email 的摘要说明。
/// </summary>
public class test : WebService
{
public test()
{
//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
InitializeComponent();
}
#region 组件设计器生成的代码
//Web 服务设计器所必需的
private IContainer components = null;
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
// WEB 服务示例
// HelloWorld() 示例服务返回字符串 Hello World
// 若要生成,请取消注释下列行,然后保存并生成项目
// 若要测试此 Web 服务,请按 F5 键
[WebMethod(EnableSession=true)]
public string HelloWorld()
{
return Session["aaa"].ToString();
}
public void aaa
{
[WebMethod(EnableSession=true)]
set{Session["aaa"] = value;}
}
}
}
客户端
test t = new test.localhost.test();
t.CookieContainer = new System.Net.CookieContainer();
t.set_aaa("hello world!");
Response.Write(t.HelloWorld());
2006年12月30日
摘要: 原文出处http://blog.csdn.net/ncjmc/archive/2006/08/28/1132879.aspx以前在用C#做网站保存缩略图的程序中发现,当保存为GIF文件类型时,原来的透明背景变成了黑色,当时由于赶时间,就统一用白色代替了背景,并用Jpeg格式存储,并没有深究。 近来在网上查阅了许多资料,看到了两种解决方法:一种是在显示时设置透明背景色,GIF文件本身并不改变,另一...
阅读全文
2006年7月13日
昨天做了两个asp页面,一个是utf-8得页面一个则是gb2312得页面.
于是发生了件怪事(主要是我第一次遇见得),单独打开这两个页面都不会出现问题,
但偏偏从utf8连接到gb2312得时候就出现了乱码.花了两个小时都搞不掉,
今天再次打开,baidu了下结果.
后来发现两个解决方案
第一:在每个gb2312页面上设置Session.CodePage=936
这样问题就解决了...
第二:从utf8转到gb2312得时候不要用<a>连接.用response.redirect跳转,也能解决.
综上,我理解为
给每个页面设置CodePage这样就把各个页面得编码都独立起来,不再受相连页面得影响
其次<a>标签连接会将页面编码属性也传递给下一个页面,而使用redirect就不会出现这样得情况了,这跟
用asp得环境变量取Request.ServerVariables("HTTP_REFERER")一样,后者就取不到.
另附上
对于ASP编码问题的深入研究与最终解决方案
哪的资料都不如官方资料权威。今天总算从MSDN中择出了ASP编码问题的解决方案。
下面是MSDN中的一段话。
Setting @CODEPAGE explicitly affects literal strings in a single response. Response.CodePage affects dynamic strings in a single response, and Session.CodePage affects dynamic strings in all responses in a session.
这句话解释清楚了@CODEPAGE,Response.CodePage,Session.CodePage 分别的作用是什么。
@CODEPAGE作用于所有静态的字符串,比如某文件中的 const blogname="我的家"
Response.CodePage,Session.CodePage作用于所有动态输出的字符串,比如<%=blogname%>
这句话很关键的是说明了Response.CodePage的作用范围是a single response,而SXNA中声明的Session.CodePage的作用范围是all responses in a session。
再看另外一句话。
If Response.CodePage is not explicitly set in a page, it is implicitly set by Session.CodePage, if sessions are enabled. If sessions are not enabled, Response.CodePage is set by @CodePage, if @CodePage is present in the page. If there is no @CodePage in the page, Response.CodePage is set by the AspCodePage metabase property. If the AspCodePage metabase property is not set, or set to 0, Response.CodePage is set by the system ANSI code page.
这句话我乍一看,把意思理解成了这样:在sessions are enabled的时候,如果Response.CodePage没有声明,则Response.CodePage会被Session.CodePage赋值。如果sessions are not enabled的时候, 如果@CodePage已声明,则Response.CodePage会被@CodePage赋值,等等.............
这句话解释了为什么从SXNA中出来以后进入一些别的页面比如oblog,z-blog等等容易出现乱码,因为其他程序没有声明Response.CodePage而恰巧SXNA声明了Session.CodePage,因此一进入SXNA,Session.CodePage立即被赋值(版本不同,有的版本赋了936有的版本赋了65001),而后进入其他程序的时候Response.CodePage马上被Session.CodePage赋值,如果这时Response.CodePage与页面本身编码不一样的话,页面就会出现乱码。所以进入z-blog出现乱码的时候我查了当时的Session.CodePage和Response.CodePage都是936,而进入oblog出现乱码的时候Session.CodePage和Response.CodePage都是65001.就是说要想保证叶面不出现乱码,应该声明Response.CodePage,否则他就会按照Session.CodePage来解释网页(而不是按照@codepage解释网页).
如果仅仅按照上面的解释的话,我实际上是很糊涂的,因为我们都是用的中文操系统,当每一次进入浏览器的时候你可以尝试输出Session.CodePage,能看到他都是936!为什么进入Z-blog的时候他不把默认的Session.CodePage的936赋给Response.CodePage呢?反而把@CodePage给了Response.CodePage?什么情况下Session.CodePage才赋值给Response.CodePage呢?原文的sessions are enabled应该如何理解呢?
也许上面的话应该这样理解:
在Session.CodePage被任何程序声明的时候,如果Response.CodePage没有声明,则Response.CodePage会被Session.CodePage赋值。如果Session.CodePage没有被任何程序声明的时候, 如果@CodePage已声明,则Response.CodePage会被@CodePage赋值,....,最后的页面动态内容部分按照Response.CodePage的值解释。
因为Zblog和Oblog都声明了@CodePage,所以,用户刚刚启动完机器然后进入浏览器浏览Zblog和Oblog的时候Response.CodePage会被@CodePage赋值,于是叶面显示正常。
这句话进一步解释了产生乱码的原因
If you set Response.CodePage or Session.CodePage explicitly, do so before sending non-literal strings to the client. If you use literal and non-literal strings in the same page, make sure the code page of @CODEPAGE matches the code page of Response.CodePage, or the literal strings are encoded differently from the non-literal strings and display incorrectly.
其中比较有用的一句话是说如果Response.CodePage和@CODEPAGE不一样的话会产生乱码。也就是说当Z-blog的@CODEPAGE=65001而Z-blog的Response.CodePage被Session.CodePage赋为936的时候就会出现乱码,oblog反之亦然。
不知道上面说了这么多解释清楚没有-_-||
下面解释一下为什么SXNA有时会把Session.CodePage赋为936,我有一个版本是这样写的:
<% OriginalCodePage=Session.CodePage %>
.......
<% Session.CodePage=OriginalCodePage %>
当用户进入浏览器的时候Session.CodePage默认为936,这个时候的默认936不是程序声明的,因此不会赋给Response.CodePage,当进入SXNA的时候,Session.CodePage被上面那段代码一折腾就变成了程序声明的Session.CodePage=936,因此再进入Zblog的时候就把936给了Response.CodePage。
至此,全部原因已经分析清楚了。
因此说,保证asp叶面一定不会出现乱码的代码应该是这样的:(假定是UTF-8的叶子)
<%@ CODEPAGE=65001 %>
<% Response.CodePage=65001%>
<% Response.Charset="UTF-8" %>
进一步说明为什么要加Response.Charset,因为MSDN说应该加...呵呵
If the code page is set in a page, then Response.Charset should also be set.
另外,文件的编码格式应该与@CODEPAGE一样:
The file format of a Web page must be the same as the @CODEPAGE used in the page.
这就是为什么zblog,pjblog等一些程序要吧文件存成UTF8编码格式的原因.
综上,如果所有的程序都声明了Response.CodePage就不会被Session.CodePage干扰而出现乱码了。所以Session.CodePage还是不能轻易用的!
参考文章:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/html/268f1db1-9a36-4591-956b-d7269aeadcb0.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/html/582e6f47-52eb-413e-8b5d-c99145cb61d8.asp
2006年6月30日
PoivY免费电话
http://www.poivy.com/en/download.html
很简单的注册,只需要填写用户名,昵称和密码,邮箱(可以随便填,取回密码用的,没有什么用处)即可完成注册,这样就有了1欧元,可以免费打66分钟的电话。
拨号规则:
国内固定电话:0086+区号+电话号(注意区号也不用加0,如:00861088230987,中间10是北京的区号,不加0)
国内手机电话:0086+手机号即可(注意不用在手机号前加0)
一个系统可以注册3个号,就可以免费打3个多小时了!
重复注册无限打电话的方法:
首先设置该软件不要随系统启动,再删除C:\Documents and Settings\当前用户\Application Data\Microsoft\Crypto\RSA 里面的所有文件之后,重新拨号,再重新打开软件又能注册3个,这样就能无限注册了!
免费拨打固话/手机国家的网络电话:
中国大陆
中国台湾
香港
安道尔共和国
阿根廷
奥地利
比利时
保加利亚
加拿大
智利
哥伦比亚
塞浦路斯
丹麦
芬兰
荷兰 美国
英国
澳大利亚
法国
直布罗陀
匈牙利
冰岛
爱尔兰
意大利
拉脱维亚
列支敦士登的
卢森堡
马来西亚
摩纳哥
蒙古 德国
巴拿马
秘鲁
葡萄牙
新加坡
斯洛文尼亚
南韩
西班牙
瑞典
泰国
土耳其
委内瑞拉
乔治亚苏维埃
新西兰
挪威
优点:
* 下载软件安装后首次运行即得30次免费通话时间.
* 充值后免费 20小时/月(每周300分钟) 拨打中国所有座机及手机,免费拨打其它50个国家的座机/手机,超出20小时拨打中国费率0.01euro/分钟 或0.1RMB/分钟,按分计费.
* 免费呼叫转移到你的座机或手机,无任何附加费.
* 支持免费获得一个VoIPIn号码.
* 支持SIP phone
* 高级功能: Webcall,让你可以用你的座机或手机直接拨打对方的座机或手机
2006年6月13日
昨天突然发现window.open('',null,'width=200,height=200,status=no');打开的窗口怎么都有显示状态栏
而本地测试却是正确的..研究了半天,询问了几个朋友的情况
发现 win2003+sp1 和winxp+sp2的系统状态栏都是存在的,而没打过sp1和sp2的系统则正常显示,
原来是微软在这两个补丁上做了改动,害的我以为系统出问题了...
据说微软以后还会对地址栏等也做响应的调整...真戴啊...
2006年6月9日
所谓幽默,也是需要渊博的知识的。
=======================
按照惯例,我们早餐喜欢吃地瓜粥。今天因为地瓜卖完了,妈妈只好黔驴技穷地削些芋头来滥竽充数。没想到那些种在阳台的芋头很好吃,全家都贪得无厌地自食其果。
出门前,我那徐娘半老的妈妈打扮的花枝招展,鬼斧神工到一点也看不出是个糟糠之妻。头顶羽毛未丰的爸爸也赶紧洗心革面沐猴而冠,换上双管齐下的西装英俊得惨绝人寰,鸡飞狗跳到让人退避参舍。东施效颦爱漂亮的妹妹更是穿上调整型内衣愚公移山画虎类犬地打扮的艳光四射,趾高气昂地穿上新买的高跟鞋。
我们一丘之貉坐着素车白马,很快地到了动物园,不料参观的人多到豺狼当道草木皆兵,害我们一家骨肉分离。妻离子散的爸爸鞠躬尽瘁地到处广播,终于查找到差点认贼作父的我和遇人不淑的妹妹,困兽之斗中,我们螳臂当车力排众议推已及人到挤到猴笼前,鱼目混珠拍了张强颜欢笑的全家福。
接着到鸡鸣狗盗的鸟园欣赏风声鹤唳哀鸿遍野的大自然美妙音乐。后来爸爸口沫横飞地为我们指鹿为马时,吹来一阵凉风,让人毛骨悚然不寒而栗,妈妈连忙为爸爸黄袍加身,也叮嘱我们要节哀顺便。
到了傍晚,因为假日的关系,餐厅家家鹊占鸠巢六畜兴旺,所以妈妈带着我们孟母参迁,最后终于决定吃火锅。有家餐厅刚换壁纸,家徒四壁很是美丽,灯火阑珊配上四面楚歌,非常有气氛。十面埋伏的女服务生们四处招蜂引蝶,忙着为客人围魏救赵口蜜腹剑到让人误认到了西方极乐世界。
饥不择食的我们点了综合火锅,作怀不乱的爸爸当头棒喝先发制人,请求为虎作伥拿着刀子班门弄斧的女服务生,快点将狡兔死走狗烹,因为尸位素餐的我们一家子早就添油加醋完毕,就等着火锅赶快沈鱼落雁好问鼎中原,可惜锅盖太小,有点欲盖弥汤料沸腾后,热得乐不思蜀的我们赶紧解衣推食好大义灭亲上下其手,一网打尽捞个水落石出。
火锅在我们呼天呛地面红耳赤地蚕食鲸吞后,很快就只剩沧海一粟,和少数的漏网之鱼。母范犹存的妈妈想要丢参落四放冬粉时发现火苗已经危在旦夕,只好投鼠忌器。幸好狐假虎威的爸爸呼卢喝雉叫来店员抱薪救火,终于死灰复燃,也让如坐针毯的我们终饱私囊。鸟尽弓藏后,我们一家子酒囊饭袋,沆淡瀣一气,我和妹妹更是小人得志,沾沾自喜。
不料结帐的时候,老板露出庐山真面目,居然要一饭千金,爸爸气得吴牛喘月,妈妈也委曲地牛衣对泣。
啊!这三生有幸的国庆节,就在爸爸对着钱包自惭形秽大义灭亲后,我们全家江郎才尽,一败涂地
2006年5月29日
男人这辈子挺难的:找个漂亮女人吧,太操心,找个不漂亮的吧,又不甘心;光顾事业了,人家说你没责任感,光顾家了,人家又说你没本事;专一点吧,人家说你不成熟;花心点吧,人家说你是禽兽;有钱,说你是坏人,没有钱,人家骂你窝囊废;自己奋斗吧,等有钱了女友也老了,让女人养吧,不如自宫练葵花宝典算了。不去应酬,怕被老板废了,去应酬吧,怕被老婆废了。哎!这年月做男人真难。女人可以等嫁,俺们等啥呀?女人还有个三八节,俺们有啥呀?祝所有群内的爷们自安天命! 男人这辈子挺难的: 长帅点吧,太抢手, 不帅吧,拿不出手; 活泼点吧,说你太油, 不出声吧,说你太闷; 穿西装吧,说你太严肃, 穿随便一点吧,说你乡吧佬; 会挣钱吧,怕你包二奶; 不挣钱吧,又怕孩子断奶, 结婚吧,怕自己后悔;不 结婚吧,怕她后悔, 要个孩子吧,怕出来没钱养, 不要孩子吧,怕老了没人养。 这年头做女人难,做男人更难,男人,就要对自己好点,祝男士们端午节快乐
2006年5月28日
测试了下我所知道的所有方法,发现关键的地方还是
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 95L);
myEncoderParameters.Param[0] = myEncoderParameter;
同时比较下不同设置的图片品质
1.只设置了graphics.SmoothingMode = SmoothingMode.HighQuality

2.只设置了graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic

3.同时设置了1,2两属性

4.只设置ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, 95L);
myEncoderParameters.Param[0] = myEncoderParameter;

5.同时设置了1,2,4步

综上图示,图像的品质关键在于设置第四步...
另外对于myImageCodecInfo = GetEncoderInfo("image/jpeg");
我发现如果按原先的.gif图片来设置GetEncoderInfo("image/gif")的话,图片的象素将会丢失很严重,而设置为jpeg却很好,而关于象素的丢失如果原先的图片格式就为gif(256色)的话应该不会发生这么多象素丢失,如果原先图片是jpg(65536色)的话到是可能会有这么严重的丢失现象....怎么会这样呢..郁闷下....
所略图品质问题一直困扰着我,一直以为只要设置了Graphics对象的SmoothingMode属性就可以了
(Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality //设置高质量,低速度呈现平滑程度) 然而在使用的过程中总是觉得生成的图片品质总是与原图有一断肉眼就能分辨的出的差异,甚不合意...
于是翻些资料发现Graphics还有个属性InterpolationMode(Graphics对象的插值模式影响 GDI+ 缩放(拉伸和收缩)图像的方式)
将此属性设置为指定高质量双三次插值法,如下
Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;(HighQualityBicubic 是质量最好的模式)
还有如下几个属性设置可以提高图像合成及加水印时的品质
Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
Graphics.CompositingQuality = CompositingQuality.HighQuality;
详细资料参考msdn
呵呵,现在生成的所略图品质有所提高,不过与某网站的所略图还是有所差距.....
不知道还有没有别的方法来生成高品质的图片..searching...
2006年5月11日
从开始的半开玩笑,到最后他们两个人认真的约定,在二月十四号的时候,把原来单纯的男女朋友关系上升为更亲密的关系。时间,地点,很快都不成问题。只差一盒安全套。
男友说:“你去买。”她有些委屈,还是答应了。
走进附近的便利店,到处逛也看不见那些东西,店员开始盯着她,随手拿了苹果汁,去结账。在账台边上看见了那些盒装安全套,因为是第一次没敢开口,不过心里想,至少 找到目标了。
第二次去了离家远一点的一家便利店,走进去,随便拿了盒吃的去结账,前面的一个女生买了盒紧急避孕药,看着店员怪怪的眼神,她没有开口。
某天回家晚了,心想现在便利店人少了吧,跑去离家十几分钟车程的地方,走进一家店,发现里面没什么人,刚鼓足勇气去账台,一个十几岁的孩子跑进来买口香糖,不得不改口买了盒薄荷糖。手拿薄荷糖进到第二家便利店,发现那个柜台离结账台好远,忽然忘了要怎样开口要求,只好买了瓶可乐。拿着薄荷糖和可乐去第三家便利店。心想只要冲进去说我要这个就可以了,在店门口微微犹豫,里面的店员朝她看了一眼,被这一眼看得没了胆量,连跨进店里的勇气都没了。
这天下定决心搞定这件事。乘车到离家很远的地方,特意没戴隐形眼镜而戴着框架眼镜,特意没有把头发束起来而是披在肩上,穿着一件平时因为嫌老气一直不穿的衣服,走进店里,用不知在家练习了几次的口气说,请给我这个,特意不带一点儿方言的味道,说的是纯正的普通话。店员面无表情的拿给她,结账,付钱,找零。这短短几分钟时间,她的脸都涨得通红。一走出店,立即放好东西,束好头发,拦了辆出租,回家。一路上心想,不知道那些人会怎么看自己,好了,自己终于也成了那种去买安全套的女生,不正经的女生了。心里突然委屈得不行,差一点在出租上掉眼泪。
告诉男友这一切,男友略带惊讶说,“我其实只是开个玩笑,想看看你是不是可以为我做一切,至于做那个事,我想我们还是不要那么心急吧。”
第二天就和男友分手了,义无反顾的。