Spiga

换新机子了

2009-05-31 13:43 by Jon.Hong, 73 visits, 网摘, 编辑

26号新入的,配置为

AMD 羿龙II 710 

HA08 Combo 

WD6400AAKS 

金泰克DDR1333 2G X 2

哈哈,扫雷终于不卡了

这其中有一个小插曲,由于原选配的金士顿内存是假的(经销商极力保证我不会是假的),系统可以运行,但当拷大文件时则发生蓝屏,搞得我好生郁闷,试了好久才发现是内存兼容问题(看来传言金士顿内存大部分假的并非虚言哦,大家要注意了)。。。

Silverlight自定义控件开发 - 令人懊恼的OnApplyTemplate问题。

2009-04-25 00:16 by Jon.Hong, 980 visits, 网摘, 编辑

继承自System.Windows.Controls.Control是不知什么时候调用OnApplyTemplate方法的,这就有可能给你制造麻烦,例如,开发了一个PathButton控件,XAML中定义一个了Path对象,然后定义了Data这个属性,让使用者可以设置Path的Data,

        /// <summary>
        
/// Gets or sets the data.
        
/// </summary>
        
/// <value>The data.</value>
        public string Data
        {
            
get { return (string)GetValue(DataProperty); }
            
set
            {
                SetValue(DataProperty, value);

                PathElement.Data 
= Services.PathGeometryParser.Parse(value);
            }
        }

 

其它地方使用这个控件

PathButton bt = new PathButton();

bt.Data = "....";

NullReferenceException, 具体原因请看这篇文章

 

解决的方法就是在PathButton的构造函数里就进行加载模板,然后调用ApplyTemplate方法。下面是我的实现方法,代码很简单

 1     /// <summary>
 2     /// XControl
 3     /// </summary>
 4     public class XControl : Control
 5     {
 6         /// <summary>
 7         /// True表示已经应用过模板
 8         /// </summary>
 9         protected bool _TemplateApplied;
10 
11         /// <summary>
12         /// 初始化组件
13         /// </summary>
14         protected virtual void InitializeComponent()
15         {
16             var objStyle = GetStyle(this.DefaultStyleKey as Type);
17             if (objStyle != null)
18             {
19                 this.Style = objStyle;
20                 this.ApplyTemplate();
21             }
22         }
23         /// <summary>
24         /// 请重写此方法代替OnApplyTemplate
25         /// </summary>
26         protected virtual void OnApplyXTemplate()
27         {
28 
29         }
30         /// <summary>
31         /// 请重写OnApplyXTemplate方法代替
32         /// </summary>
33         public override sealed void OnApplyTemplate()
34         {
35             if (this._TemplateApplied)
36                 return;
37             this._TemplateApplied = true;
38             this.OnApplyXTemplate();
39         }
40 
41         #region Static Methods
42         /// <summary>
43         /// 样式字典集合
44         /// </summary>
45         private static System.Collections.Generic.Dictionary<Type, ResourceDictionary> _ResourceDictionarys =
46             new System.Collections.Generic.Dictionary<Type, ResourceDictionary>();
47         /// <summary>
48         /// 获取样式
49         /// </summary>
50         /// <param name="styleKey"></param>
51         /// <returns></returns>
52         static public Style GetStyle(Type styleKey)
53         {
54             var rd = GetResourceDictionary(styleKey);
55             if (rd != null)
56             {
57                 string strKey = styleKey.ToString();
58                 if (rd.Contains(strKey))
59                     return rd[strKey] as Style;
60             }
61             return null;
62         }
63         /// <summary>
64         /// 获取样式字典
65         /// </summary>
66         /// <param name="styleKey"></param>
67         /// <returns></returns>
68         static public ResourceDictionary GetResourceDictionary(Type styleKey)
69         {
70             if (_ResourceDictionarys.ContainsKey(styleKey))
71                 return _ResourceDictionarys[styleKey];
72 
73             string fullName = styleKey.Assembly.FullName;
74             string baseName = fullName.Substring(0, fullName.IndexOf(",")) + ".g";
75 
76             System.Resources.ResourceManager manager = new System.Resources.ResourceManager(baseName, styleKey.Assembly);
77             System.IO.UnmanagedMemoryStream stream = null;
78             try
79             {
80                 stream = manager.GetStream("themes/generic.xaml", System.Globalization.CultureInfo.CurrentUICulture);
81                 string strTemplate = new System.IO.StreamReader(stream).ReadToEnd();
82                 var rd = System.Windows.Markup.XamlReader.Load(strTemplate) as ResourceDictionary;
83                 _ResourceDictionarys.Add(styleKey, rd);
84                 return rd;
85             }
86             catch { }
87             finally
88             {
89                 stream.Dispose();
90             }
91             return null;
92         }
93         #endregion
94     }

 

 1     public class PathButton2 : XControl
 2     {
 3         public PathButton2()
 4         {
 5             this.DefaultStyleKey = typeof(PathButton);
 6             //初始化组件
 7             base.InitializeComponent();
 8         }
 9         /// <summary>
10         /// 重写OnApplyXTemplate代替OnApplyTemplate方法
11         /// </summary>
12         protected override void OnApplyXTemplate()
13         {
14             base.OnApplyXTemplate();
15         }
16     }
17 

通过继承XControl的自定义控件与System.Windows.Controls.Control不同在于,需要重写OnApplyXTemplate代替OnApplyTemplate方法,然后在构造函数里设置DefaultStyleKey后手动调用InitializeComponent方法。

SqlServer 2008

2008-12-12 11:11 by Jon.Hong, 90 visits, 网摘, 编辑
听说SqlServer2008支持空间数据才装的,安装过程一切顺利,没遇到什么异常。
数据库一直是弱项,今后要好好学学了,这里记录一下。

使托管在Asp.net中的WCF服务也使用Form验证

2008-12-03 15:26 by Jon.Hong, 111 visits, 网摘, 编辑
今天正好碰到这个问题,在园子里搜了一下,没有结果,这里纪录一下,方便有类似需求的朋友。

在Web.Config中增加如下配置
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"></serviceHostingEnvironment>
在 <system.serviceModel> 节点内。


然后在你的服务类中添加如下特性

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class ManageService : IManageService

Form验证则不变,这样子当你访问 ManageService.svc 时,如果未验证,则会跳转到 Login.aspx 页。

Linq学习的一些资料

2008-11-04 16:39 by Jon.Hong, 56 visits, 网摘, 编辑

了解Lambda 表达式是必须的: 
   http://www.rainsts.net/article.asp?id=535   
   http://www.cppblog.com/javenstudio/articles/778.html
   http://blog.joycode.com/scottgu/archive/2007/04/09/100744.aspx

Linq Provider 
   http://www.cnblogs.com/sweatypalms/archive/2007/10/18/929312.html
   http://www.rainsts.net/article.asp?id=613
   http://www.cnblogs.com/lovecherry/archive/2008/03/28/1127721.html

怪异的SilverLight Canvas.Left, Top问题

2008-10-08 11:17 by Jon.Hong, 1398 visits, 网摘, 编辑

   先看下面这一段XAML:

   
<Canvas Margin="-200000000,0,0,0" x:Name="LayoutRoot" Background="White">

        <Image Canvas.Left="200000000" Source="2008090414343223a66.jpg" Stretch="None"/>

        <Image Source="2008090414343223a66.jpg" Stretch="None" Canvas.Left="200000250"/>

        <Image Source="2008090414343223a66.jpg" Stretch="None" Canvas.Left="200000500"/>

        <Image Source="2008090414343223a66.jpg" Stretch="None" Canvas.Left="200000750"/>

        <Image Source="2008090414343223a66.jpg" Stretch="None" Canvas.Left="200001000"/>

    </Canvas>
   
   大家一看便知了,LayoutRoot容器向左偏移了 -200000000 个像素, 然后在里面套了四张图片(图片宽为250个象素),设置Canvas.Left。
   我给大家上张图,大家一看便明白了
   89P_TLHKTVSBV(H{}DQ)A`R.jpg
   大家看到了没,两个红框的值不一样啊,我明明设置了Canvas.Left为
200000250,而在Blend设计器中反映的却是200000256....
   89PeeeR.jpg
   上图就是运行结果,两个图片之间就有缝隙了。

   之所以说它这个问题怪异,是当LayoutRoot的margin left值和Canvas.SetLeft(img)值小一些时,(如50000啊)这个问题便华丽的消失了。当然了,有人会说我BT,你没事将值设个2亿那么大干吗啊,但是Canvas.Left参数是Double类型,我并没有超出这个范围啊。这个问题不是在特定的BT的环境下,还真难发现,这知这算不算是一个BUG,呵呵。

加油,火箭!

2008-10-01 13:10 by Jon.Hong, 80 visits, 网摘, 编辑
新赛季的火箭值得让人期待,麦子,大姚,阿泰,斯克拉,8.2 这些人都是证明过的,自然无话可说,弗老大的实力是有点,但是经过伤病之后状态能恢复多少,确实是个问号。300万的年薪搞定了兰德里,上赛季后半段确定表现不错,希望不是昙花一现的爆发,海耶斯随着阿泰的到来上场时间去减少,进攻不怎样,但防守确定不错,多西是新人,不能抱有太大希望,布鲁克斯不能一味的滥投,要多向麦子学学传球,控制节奏,斯通的神经刀能让你狂欢,但有时也能让你出冷汗,海德日子不好过,被交易流言包围着。

麦子和大姚的健康确定让人担心,如果火箭没有大面积的伤病,这套阵容足可以称霸西部。

关于Silverlight 2 RC0如何在离线状态下安装

2008-09-27 16:08 by Jon.Hong, 256 visits, 网摘, 编辑
Silverlight_Tools.exe在安装时首先会从网站下载一个文件,而此时如果无法连接internet,则安装会中断,通过监测,发现其下载的竟是 Silverlight.2.0_Developer.exe (真想不到Silverlight_Tools.exe安装有70多MB,为何就不能将Silverlight.2.0_Developer.exe 一齐打包进去呢),解决的方法就是在C:\Documents and Settings\Administrator\Local Settings\Temp下新建Silverlight Tools RTW目录,然后将Silverlight.2.0_Developer.exe拷进去就OK了。

Silverlight_Tools.exe安装也真够笨的,即使你已经安装了Silverlight.2.0_Developer.exe,它还是会网站去下载,真是不撞南墙不回头啊。

SilverLight 2 RC0发布了

2008-09-26 11:07 by Jon.Hong, 112 visits, 网摘, 编辑
http://www.cnblogs.com/ibillguo/archive/2008/09/26/1299257.html

SilverLight 2 RC0今天发布了,看来离正式版不远了
(目前只支持英文版的VS2008 SP1,在安装之前需卸掉SilverLight一切相关东西,包括Blend,然后重启,不然安装完之后新建SilverLight项目时会提示说请安装SilverLight SDK。)


SL中输入中文会重复的问题得到了解决,但当Windowless=true时,则输入中文就不工作了。

SilverLight + WCF进行大文件上传,支持断点续传(解决先前版本中发生System.ExecutionEngineException的异常)

2008-09-24 16:46 by Jon.Hong, 1008 visits, 网摘, 编辑

L`0`O0`Q{Z$LEHA2@]JQGO9.jpg
这是运行界面。

请下载了原版的朋友点这里重新下载

SilverLight调用WCF,发生System.ExecutionEngineException异常,不知是不是SilverLight的一个Bug

2008-09-16 16:43 by Jon.Hong, 1588 visits, 网摘, 编辑
在SilverLight是允许通过OpenFileDialog控件读取本地文件的,故用SL做文件上传是一个很好的解决方案,思路也很简单,就将文件分块上传,然后在服务端写入到文件即可。本以为很简单的实现,却没想到中间横生枝节,那就是SilverLight在连续调用WCF服务时,当达到一定次数时(这个次数不确定),偶尔会发生 System.ExecutionEngineException 异常,并且此异常无法扑获。

为了验证是不是SilverLight调用WCF的问题,写了一下最简单的,但是问题依旧

Service1.svc

    [ServiceContract]

    public interface IService1

    {

        [OperationContract]

        int DoWork(System.Byte[] bytes);

    }

 

    // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config.

    public class Service1 : IService1

    {

        /// <summary>

        /// 最简单的实现,就传入的内容写到日志文件中

        /// </summary>

        /// <param name="bytes"></param>

        /// <returns></returns>

        public int DoWork(System.Byte[] bytes)

        {

            Jon.Services.LogHelper.GetLogger(this.GetType().ToString()).Debug(System.Text.Encoding.Unicode.GetString(bytes));

            return bytes.Length;

        }

    }

服务端的配置

  <system.serviceModel>

    <behaviors>

      <serviceBehaviors>

        <behavior name="SilverlightApplication1Web.Service1Behavior">

          <serviceMetadata httpGetEnabled="true" />

          <serviceDebug includeExceptionDetailInFaults="false" />

        </behavior>

      </serviceBehaviors>

    </behaviors>

    <services>

      <service behaviorConfiguration="SilverlightApplication1Web.Service1Behavior" name="SilverlightApplication1Web.Service1">

        <endpoint address="" bindingConfiguration="LargeBuffer" binding="basicHttpBinding" contract="SilverlightApplication1Web.IService1" />

      </service>

    </services>

    <bindings>

      <basicHttpBinding>

        <binding name="LargeBuffer" maxBufferSize="4096000" maxReceivedMessageSize="4096000">

          <readerQuotas maxDepth="4096000" maxStringContentLength="4096000" maxArrayLength="4096000" maxBytesPerRead="4096000" maxNameTableCharCount="4096000"/>

        </binding>

      </basicHttpBinding>

    </bindings>

  </system.serviceModel>



SilverLight端的也很简单

    public partial class Page : UserControl

    {

        public Page()

        {

            InitializeComponent();

 

            ServiceReference1.Service1Client client = new SilverlightApplication1.ServiceReference1.Service1Client(new BasicHttpBinding(BasicHttpSecurityMode.None), new EndpointAddress("http://localhost:9228/Service1.svc"));

 

            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            for (int i = 0; i < 538; i++)

            {

                sb.Append(Guid.NewGuid().ToString());

                sb.Append(System.Environment.NewLine);

            }

           

            int index = 0;

            client.DoWorkCompleted += delegate(object sender, SilverlightApplication1.ServiceReference1.DoWorkCompletedEventArgs e)

            {

                if (index < 500000000)

                {

                    System.Threading.Thread.Sleep(50);      
                   
client.DoWorkAsync(System.Text.
Encoding.Unicode.GetBytes(sb.ToString()));

                    index++;                   

                    //System.Windows.Browser.HtmlPage.Document.SetProperty("title", index.ToString() + "_" + e.Result.ToString());

                }

            };

 

            client.DoWorkAsync(System.Text.Encoding.Unicode.GetBytes(sb.ToString()));

            //System.Windows.Browser.HtmlPage.Document.SetProperty("title", index.ToString());

        }

    }

就是循环调用WCF,向服务器端上传文件内容。System.ExecutionEngineException异常就发生在 client.DoWorkAsync() 时,(DoWorkAsync方法是VS添加引用时自动生成的),我想应该是SilverLight对WCF支持不好的原因吧,,各位达人指点迷津一下吧,,(真心希望不是SilverLight的问题,而是本人菜鸟水平所致)。

测试项目在这里

儿子长牙了

2008-09-11 16:23 by Jon.Hong, 52 visits, 网摘, 编辑
听老婆说,儿子长牙了,记录一下。

今是9.11啊,怎么偏偏今天长出来了,呵呵。

说说SilverLight ContextMenu TextBox

2008-09-09 13:30 by Jon.Hong, 263 visits, 网摘, 编辑

看到这个标题,大家肯定会说,ContextMenu与TextBox何干,呵呵,表面上看起来是无关,与英文用户也无关,但跟中文用户就有很大关系了。

SilverLight到目前为止还是不支持ContextMenu的,实现的方法一般都是侦听 Document 的 oncontextmenu 事件( HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu); ),
侦听到了 oncontextmenu 事件以后就好办了。但问题是必须设置 Windowless="true"  才能有效侦听到 oncontextmenu 事件,好吧。为了实现也不管这么多了。
而此时页面上如果有 TextBox 控件的话,灾难就会光临你了,任你什么中文输入法,你也甭想输入一个中文。。。

简单的Google卫星图象下载软件

2008-09-08 15:19 by Jon.Hong, 568 visits, 网摘, 编辑
下面是运行界面
ccccd06-557d-47f5-8cf9-9a828ca794ef.jpg

下载:http://files.cnblogs.com/T-MAC/DownLoadGoogleSatelliteDataBase.rar

SilverLight广告,真如所说那样吗?

2008-08-30 13:34 by Jon.Hong, 205 visits, 网摘, 编辑

共享一个在SilverLight下的文件上传组件(支持大文件,断点续传)

2008-08-14 10:41 by Jon.Hong, 1019 visits, 网摘, 编辑
摘要:不限文件大小,支持断点续传。 阅读全文

VS2008SP1打上之后将无法打开SilverLight项目

2008-08-12 15:21 by Jon.Hong, 367 visits, 网摘, 编辑
真是手痒啊,打上了SP1后,SilverLight项目打不开了。

看来要想用上SP1则只能等SilverLight 2.0正式版本。




英文版本的用户只需装上最新版本的SilverLight 2 beta2 开发包就OK了(中文版本的目前好象还不行)

关于SilverLight 2 beta2 中 WCF 跨域调用

2008-08-07 10:25 by Jon.Hong, 396 visits, 网摘, 编辑
地球人都知道新建一个策略文件就可解决
clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  
<cross-domain-access>
    
<policy>
      
<allow-from http-request-headers="*">
        
<domain uri="*"/>
      
</allow-from>
      
<grant-to>
        
<resource path="/" include-subpaths="true"/>
      
</grant-to>
    
</policy>
  
</cross-domain-access>
</access-policy>

现在有一个问题容易被人忽视,,那就是这个文件该放在哪呢?我就被这个问题搞了半天。

假如你要调用的WCF服务URL为 : http://localhost/wcfservice1/abc.svc  那么这个策略文件是放在localhost的主目录下,而不是localhost/wcfservice1下。

郁闷,SilverLight 2.0 beta 2无法安装。。。

2008-06-11 16:44 by Jon.Hong, 458 visits, 网摘, 编辑
MS只发布了英文版和小日本版的,TNND,真够气人的。。。

sadf.jpg

SilverLight2.0例子集合

2008-05-20 11:03 by Jon.Hong, 2706 visits, 网摘, 编辑

Web Services - SOAP Weather Widget
weatherwidget.jpg
This widget provides live weather data for any ZIP code by accessing a SOAP web service. For more web services samples click here.
演示:http://silverlight.net/Samples/2b1/WeatherWidget/run/default.html
实例下载:http://silverlight.net/Samples/2b1/WeatherWidget/WeatherWidget.zip

Nova Light
fly.jpg
Nova Light is a small 3D engine built using Silverlight that handles basics 3D features like solid faces, multiple lights, cameras, objects and materials.

SilverLight2.0是不支持3D的,Noval Light是一个轻量型的3D引擎,不过从运行效果来看很卡。
演示:http://www.catuhe.com/NovaLight/NovaLight.aspx
没有提供源码下载

Free Silverlight Chart Control
chart.jpg
The Free Silverlight Chart Control provides a charting solution in a Silverlight environment. It uses XAML and C# to display charts on the Silverlight platform. The Free Silverlight Chart Control supports the following chart types: vertical bar, cylinder bar, horizontal bar, stacked vertical bar, stacked horizontal bar, stacked area line, bar area line, XY line, scatter plot radar, and more!
开源的SilverLight的图表控件,效果挺不错的,有动画
演示:http://home.comcast.net/~venkata.guddanti/FreeSilverlightChart/index.html#
下载:http://home.comcast.net/~venkata.guddanti/FreeSilverlightChart/FreeSilverlightChart.zip

Silverlight Panorama Viewer

Silverlight control to view panoramic pictures. It supports auto-rotating of the picture, drag-drop, description text, etc.
SilverLight实现的一个虚拟全景,不过没有放大缩小功能,但运行效果很流畅。
演示:http://www.michielpost.nl/panorama/
没有提供源码下载