<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Google Stop Blog - The future is fusion &#187; C#</title>
	<atom:link href="http://googlestop.com/blog/category/programming-language/csharp/feed/" rel="self" type="application/rss+xml" />
	<link>http://googlestop.com/blog</link>
	<description>Just another weblog of Charry</description>
	<lastBuildDate>Sat, 10 Jul 2010 13:02:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ASP.net 发布的小问题</title>
		<link>http://googlestop.com/blog/2008/11/aspnet-%e5%8f%91%e5%b8%83%e7%9a%84%e5%b0%8f%e9%97%ae%e9%a2%98/</link>
		<comments>http://googlestop.com/blog/2008/11/aspnet-%e5%8f%91%e5%b8%83%e7%9a%84%e5%b0%8f%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 13:13:34 +0000</pubDate>
		<dc:creator>Charry</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming Language]]></category>

		<guid isPermaLink="false">http://googlestop.com/blog/2008/11/20/aspnet-%e5%8f%91%e5%b8%83%e7%9a%84%e5%b0%8f%e9%97%ae%e9%a2%98/</guid>
		<description><![CDATA[Exception Details: System.Data.SqlClient.SqlException: Failed to update database &#8220;C:InetpubwwwrootSSRAPP_DATAASPNETDB.MDF&#8221; because the database is read-only. 上面的例子通常发生在publish一个新开发的web application的时候，解决方法很简单：即修改App_Data这个目录的Security属性，加入用户&#8221;NETWORK SERVICE&#8221;，并设置该用户可以对这个目录有Write权限。]]></description>
			<content:encoded><![CDATA[<p>Exception Details: System.Data.SqlClient.SqlException: Failed to update database &#8220;C:InetpubwwwrootSSRAPP_DATAASPNETDB.MDF&#8221; because the database is read-only.</p>
<p>上面的例子通常发生在publish一个新开发的web application的时候，解决方法很简单：即修改App_Data这个<strong>目录</strong>的Security属性，加入用户&#8221;NETWORK SERVICE&#8221;，并设置该用户可以对这个目录有Write权限。</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4638832065672516";
google_ad_slot = "9996015509";
google_ad_width = 468;
google_ad_height = 15;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://googlestop.com/blog/2008/11/aspnet-%e5%8f%91%e5%b8%83%e7%9a%84%e5%b0%8f%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# LDAP Wrapper</title>
		<link>http://googlestop.com/blog/2008/11/c-ldap-wrapper/</link>
		<comments>http://googlestop.com/blog/2008/11/c-ldap-wrapper/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 09:01:42 +0000</pubDate>
		<dc:creator>Charry</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programming Language]]></category>

		<guid isPermaLink="false">http://googlestop.com/blog/2008/11/15/c-ldap-wrapper/</guid>
		<description><![CDATA[Before you try to run the following code, please download Novel LDAP lib: http://forge.novell.com/modules/xfcontent/downloads.php/ldapcsharp/ldapcsharp/CsharpLDAP-v2.1.10/ [csharp] using System; using System.Collections.Generic; using System.Text; using Novell.Directory.Ldap; namespace LDAPUtility { class LDAPUtil { private string ldapHost = &#8220;ssuzdc3&#8243;; private int ldapPort = 389; LdapConnection ldapConn = null; private void Connect() { try { // Creating an LdapConnection instance ldapConn [...]]]></description>
			<content:encoded><![CDATA[<p>Before you try to run the following code, please download Novel LDAP lib:</p>
<p><a title="http://forge.novell.com/modules/xfcontent/downloads.php/ldapcsharp/ldapcsharp/CsharpLDAP-v2.1.10/" href="http://forge.novell.com/modules/xfcontent/downloads.php/ldapcsharp/ldapcsharp/CsharpLDAP-v2.1.10/">http://forge.novell.com/modules/xfcontent/downloads.php/ldapcsharp/ldapcsharp/CsharpLDAP-v2.1.10/</a></p>
<p>[csharp]<br />
using System;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using Novell.Directory.Ldap;</p>
<p>namespace LDAPUtility<br />
{<br />
    class LDAPUtil<br />
    {<br />
        private string ldapHost = &#8220;ssuzdc3&#8243;;<br />
        private int ldapPort = 389;<br />
        LdapConnection ldapConn = null;</p>
<p>        private void Connect()<br />
        {<br />
            try<br />
            {<br />
                // Creating an LdapConnection instance<br />
                ldapConn = new LdapConnection();</p>
<p>                // Connect function will create a socket connection to the server<br />
                ldapConn.Connect(ldapHost, ldapPort);</p>
<p>                // Bind function with null user dn and password value will perform anonymous bind<br />
                // to LDAP server<br />
                ldapConn.Bind(null, null);<br />
            }<br />
            catch (Exception e)<br />
            {<br />
                // failed to connect to server<br />
            }<br />
        }</p>
<p>        private void Disconnect()<br />
        {<br />
            ldapConn.Disconnect();<br />
            ldapConn = null;<br />
        }</p>
<p>        public string GetSupervisor(string id)<br />
        {<br />
            Connect();</p>
<p>            string boss = &#8220;&#8221;;<br />
            try<br />
            {<br />
                LdapSearchResults lsc = ldapConn.Search(&#8220;OU=Users,OU=Suzhou,DC=charry,DC=org&#8221;,<br />
                LdapConnection.SCOPE_ONE,<br />
                &#8220;sAMAccountName=&#8221; + id,<br />
                null,<br />
                false);</p>
<p>                while (lsc.hasMore())<br />
                {<br />
                    LdapEntry nextEntry = null;<br />
                    try<br />
                    {<br />
                        nextEntry = lsc.next();<br />
                    }<br />
                    catch (LdapException e)<br />
                    {<br />
                        // Exception is thrown, go for next entry<br />
                        continue;<br />
                    }</p>
<p>                    LdapAttribute attribute = nextEntry.getAttribute(&#8220;manager&#8221;);<br />
                    boss = attribute.StringValue;<br />
                }<br />
            }<br />
            catch (Exception e)<br />
            {<br />
                // exception<br />
            }</p>
<p>            Disconnect();</p>
<p>            return GetAMAcountName(boss);<br />
        }</p>
<p>        private string GetFullName(string id)<br />
        {<br />
            // CN=Wang, Charry,OU=Users,OU=Suzhou,DC=charry,DC=org<br />
            int end = id.IndexOf(&#8220;OU=&#8221;);</p>
<p>            id = id.Substring(3, end &#8211; 4);<br />
            id = id.Replace(&#8220;\&#8221;, &#8220;&#8221;);</p>
<p>            return id;<br />
        }</p>
<p>        // convert distinguished name to AMAcountName<br />
        public string GetAMAcountName(string id)<br />
        {<br />
            id = GetFullName(id);<br />
            Connect();</p>
<p>            string tmp = &#8220;&#8221;;<br />
            try<br />
            {<br />
                LdapSearchResults lsc = ldapConn.Search(&#8220;OU=Users,OU=Suzhou,DC=charry,DC=org&#8221;,<br />
                LdapConnection.SCOPE_ONE,<br />
                &#8220;displayName=&#8221; + id,<br />
                null,<br />
                false);</p>
<p>                while (lsc.hasMore())<br />
                {<br />
                    LdapEntry nextEntry = null;<br />
                    try<br />
                    {<br />
                        nextEntry = lsc.next();<br />
                    }<br />
                    catch (LdapException e)<br />
                    {<br />
                        // Exception is thrown, go for next entry<br />
                        continue;<br />
                    }</p>
<p>                    LdapAttribute attribute = nextEntry.getAttribute(&#8220;sAMAccountName&#8221;);<br />
                    tmp = attribute.StringValue;<br />
                }<br />
            }<br />
            catch (Exception e)<br />
            {<br />
                // exception<br />
            }</p>
<p>            Disconnect();</p>
<p>            return tmp;<br />
        }</p>
<p>        public string GetDisplayName(string id)<br />
        {<br />
            Connect();<br />
            string name = &#8220;&#8221;;<br />
            // get fullname</p>
<p>            try<br />
            {<br />
                LdapSearchResults lsc = ldapConn.Search(&#8220;OU=Users,OU=Suzhou,DC=charry,DC=org&#8221;,<br />
                LdapConnection.SCOPE_ONE,<br />
                &#8220;sAMAccountName=&#8221; + id,<br />
                null,<br />
                false);</p>
<p>                while (lsc.hasMore())<br />
                {<br />
                    LdapEntry nextEntry = null;<br />
                    try<br />
                    {<br />
                        nextEntry = lsc.next();<br />
                    }<br />
                    catch (LdapException e)<br />
                    {<br />
                        // Exception is thrown, go for next entry<br />
                        continue;<br />
                    }</p>
<p>                    <br />
                    LdapAttribute attribute = nextEntry.getAttribute(&#8220;displayName&#8221;);<br />
                    name = attribute.StringValue;<br />
                }<br />
            }<br />
            catch (Exception e)<br />
            {<br />
                // exception<br />
            }</p>
<p>            Disconnect();</p>
<p>            return name;<br />
        }</p>
<p>        public string GetEmail(string id)<br />
        {<br />
            Connect();<br />
            string email = &#8220;&#8221;;<br />
            try<br />
            {<br />
                LdapSearchResults lsc = ldapConn.Search(&#8220;OU=Users,OU=Suzhou,DC=charry,DC=org&#8221;,<br />
                LdapConnection.SCOPE_ONE,<br />
                &#8220;sAMAccountName=&#8221; + id,<br />
                null,<br />
                false);</p>
<p>                while (lsc.hasMore())<br />
                {<br />
                    LdapEntry nextEntry = null;<br />
                    try<br />
                    {<br />
                        nextEntry = lsc.next();<br />
                    }<br />
                    catch (LdapException e)<br />
                    {<br />
                        // Exception is thrown, go for next entry<br />
                        continue;<br />
                    }</p>
<p>                    LdapAttribute attribute = nextEntry.getAttribute(&#8220;mail&#8221;);<br />
                    email = attribute.StringValue;<br />
                }<br />
            }<br />
            catch (Exception e)<br />
            {<br />
                // exception<br />
            }</p>
<p>            Disconnect();</p>
<p>            return email;<br />
        }</p>
<p>        public static void test()<br />
        {<br />
            string ldapHost = &#8220;ssuzdc3&#8243;;<br />
            int ldapPort = 389;</p>
<p>            try<br />
            {<br />
                // Creating an LdapConnection instance<br />
                LdapConnection ldapConn = new LdapConnection();</p>
<p>                // Connect function will create a socket connection to the server<br />
                ldapConn.Connect(ldapHost, ldapPort);</p>
<p>                // Bind function with null user dn and password value will perform anonymous bind<br />
                // to LDAP server<br />
                ldapConn.Bind(null, null);</p>
<p>                // Searches in the Marketing container and return all child entries just below this<br />
                // container i.e. Single level search<br />
                LdapSearchResults lsc = ldapConn.Search(&#8220;OU=Users,OU=Suzhou,DC=charry,DC=org&#8221;,<br />
                LdapConnection.SCOPE_ONE,<br />
                &#8220;sAMAccountName=qinick&#8221;,<br />
                null,<br />
                false);</p>
<p>                while (lsc.hasMore())<br />
                {<br />
                    LdapEntry nextEntry = null;<br />
                    try<br />
                    {<br />
                        nextEntry = lsc.next();<br />
                    }<br />
                    catch (LdapException e)<br />
                    {<br />
                        Console.WriteLine(&#8220;Error: &#8221; + e.LdapErrorMessage);<br />
                        // Exception is thrown, go for next entry<br />
                        continue;<br />
                    }</p>
<p>                    Console.WriteLine(&#8220;n&#8221; + nextEntry.DN);<br />
                    LdapAttributeSet attributeSet = nextEntry.getAttributeSet();<br />
                    System.Collections.IEnumerator ienum = attributeSet.GetEnumerator();<br />
                    while (ienum.MoveNext())<br />
                    {<br />
                        LdapAttribute attribute = (LdapAttribute)ienum.Current;<br />
                        string attributeName = attribute.Name;<br />
                        string attributeVal = attribute.StringValue;<br />
                        Console.WriteLine(attributeName + &#8220;value:&#8221; + attributeVal);<br />
                    }<br />
                }<br />
                ldapConn.Disconnect();</p>
<p>            }<br />
            catch (Exception e)<br />
            {<br />
                string x = e.Message;<br />
            }</p>
<p>            Console.Read();<br />
        }<br />
    }<br />
}<br />
[/csharp]</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-4638832065672516";
google_ad_slot = "9996015509";
google_ad_width = 468;
google_ad_height = 15;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://googlestop.com/blog/2008/11/c-ldap-wrapper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
