David's profileprowyh's spaceBlogLists Tools Help

Blog


    April 30

    gardener

    flower blooming with gardener's cultivating
     
    April 27

    哀伤的弗吉尼亚

    sad & cry.............not just Virginia...............
     
    April 10

    关于UTF-8的一点注记

    First of all, CLR via C#! I've got it! Thanks soooooooooooooooooo much!
     
    如下两个文件,a.htm和a.js。
     
    a.htm
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <script type="text/javascript" src="a.js"></script>
    </head>
    <body>
    <div id="info"></div>
    </body>
    </html>
     
    a.js
    function showMessage()
    {
        var info = document.getElementById("info");
        if (info)
        {
            info.innerHTML = "信息提示...";
        }
    }
     
    则a.js必须明确存为UTF-8格式,showMessage()才能正确显示中文,如果a.js默认保存为ANSI格式,则showMessage()显示乱码。
    April 05

    GUID

    UUID是分布式计算环境中用于标识对象的唯一标识符(Universally Unique IDentifier),后来Microsoft在COM中为了唯一标识Class, Interface, Object, etc.而引入了GUID(Globally Unique IDentifier)并提供了API来创建GUID:
     
    1、SQL Server
     
    SQL Server提供了NEWID()函数用于生成GUID。
    可以用GUID来作为记录的唯一标识符:
    CREATE TABLE myTable (
        id uniqueidentifier NOT NULL,
        ...
    )
    ALTER TABLE myTable ADD DEFAULT (NEWID()) FOR id
     
    2、Visual C++
     
    COM中提供了CoCreateGuid()方法用于创建GUID:
    STDMETHODIMP CGuidObject::GetGUID(BSTR* bstrGUID)
    {
        HRESULT  hr = S_OK;
        GUID  guid;
        hr = CoCreateGuid(&guid);
        if (hr == S_OK) {
            OLECHAR  szGUID[256];
            StringFromGUID2(guid, szGUID, sizeof(szGUID));
            *bstrGUID = SysAllocString(szGUID);
        }
        return hr;
    }
     
    3、C#
     
    .NET在System中提供了Guid结构,其NewGuid()方法可以用于创建GUID:
    using System;
    public class myGuid
    {
        public static void Main()
        {
            Guid myGuid = Guid.NewGuid();
            Console.WriteLine("GUID:{0}", myGuid.ToString());
        }
    }
     
    注记:
     
    1、如果Table中的id字段为uniqueidentifier类型,则通过下面的代码取到id的值:
    SqlDataReader rdr = cmd.ExecuteReader();
    if (rdr.Read())
    {
        string sGUID = ((System.Guid)rdr["id"]).ToString();
    }
     
    2、SQL Server中的NEWID()函数和C#中的System.Guid.NewGuid()方法有两点区别:
    1) NEWID()返回的格式是大写形式,NewGuid()返回的格式是小写形式;
    2) NEWID()带有大括号"{}",NewGuid()则没有。
    具体而言,NEWID()的格式是"{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}",NewGuid()的格式是"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"。
     
    SQL Server在将varchar格式的“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”字符串转换为uniqueidentifier类型时,自动转换为NEWID()的格式。
     
    3、有人报告了一个“匪夷所思”的问题:在获取类型为uniqueidentifier的参数返回值(cmd.Parameters["@valueID"].Value)时,如果该值为Null(DbNull),则cmd.Parameters["@valueID"].Value的类型为System.Guid,如果该值不为Null,则其类型为SqlGuid!
     
    我没试过,不知道是否真的如此。录在这里,仅做参考。

    Puzzled by WebServices

    在BMP系统中,针对Web环境中用户认证的非安全性,设计了一种基于CHAP(Challenge Handshake Authentication Protocol)协议的用户认证模型,但在用WebServices实现身份验证时,发现在WebServices中,HttpContext.Current.Session为Null!而ASP.NET的其它对象如Application、Server、Request、Response却都可访问!
     
    为什么没有Session对象呢?在折腾了一天之后,发现问题出在WebMethodAttribute。WebMethodAttribute的EnableSession属性在默认情况下为false,只要将EnableSession设置为true,就可以访问Session对象了。
     
    [WebMethod Description="This is a service method which used to return the value of a session variable.", EnableSession=true]
    public string GetSessionValue()
    {
        string sValue = (string)HttpContext.Current.Session["aVariable"];
        return sValue;
    }
     
    MSDN上说,如果不需要用到Session,则应将EnableSession设置为false,这样可以提高性能。所以其初始值为false。如果需要用到Session,则需要将其设置为true,否则Session对象在WebServices中不可访问。