<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>C#</title>
        <link>http://www.drowningintechnicaldebt.com/DennisBottjer/category/5.aspx</link>
        <description>General C# code examples</description>
        <language>en-US</language>
        <copyright>Dennis Bottjer</copyright>
        <generator>Subtext Version 2.1.2.2</generator>
        <item>
            <title>Automated Web Testing with Visual Studio 2008</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2009/04/28/automated-web-testing-with-visual-studio-2008.aspx</link>
            <description>&lt;h1&gt;Tulsa Developers User Group | Automated Web Testing with Visual Studio 2008 (Review)&lt;/h1&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/default.aspx" target="_blank"&gt;Corey Roth&lt;/a&gt; presented tonight on automated web testing with Visual Studio 2008 at the Tulsa Developers User Group.  Visual Studio can be used to record an action such as logging into a web application.  Alternatively, users can inspect screen values for specific results.  The test would pass if the expect value is present and fail if the value is missing.  Visual Studio must be installed to execute the tests.   &lt;/p&gt;  &lt;p&gt;A tests project actually generates .NET Code (C# or VB.NET).  The tool can also be used to show raw header information and cookies.  One drawback is that only Internet Explorer is supported.&lt;/p&gt;  &lt;h2 /&gt;  &lt;h2&gt;Additional Information:&lt;/h2&gt;  &lt;p&gt;Follow me on twitter &lt;a title="Follow Dennis Bottjer on Twitter" href="http://twitter.com/dbottjer" target="_blank"&gt;@dbottjer&lt;/a&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:885ff8fc-9044-4f80-9e15-5c2774ad0534" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Web+Automated+Tested" rel="tag"&gt;Web Automated Tested&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Tulsa+Developers+User+Group" rel="tag"&gt;Tulsa Developers User Group&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/128.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2009/04/28/automated-web-testing-with-visual-studio-2008.aspx</guid>
            <pubDate>Tue, 28 Apr 2009 06:32:03 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/128.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2009/04/28/automated-web-testing-with-visual-studio-2008.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/128.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/128.aspx</trackback:ping>
        </item>
        <item>
            <title>REGULAR EXPRESSIONS WITH EXpresso</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2009/01/15/regular-expressions-with-expresso.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Issue:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Regular Expression are quite power especially for validation purposes.  Classic examples include password and email validation.  However, regular expressions are usually something developers get to work then forget about.  I don't work with regular expression everyday so I don't bother memorizing the syntax.  So when I do need to use a regular expression in code I usually end up searching the web for an example.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A coworker here at &lt;a title="SpringPoint Technologies Tulsa SharePoint Development" target="_blank" href="http://www.myspringpoint.com"&gt;SpringPoint Technologies&lt;/a&gt; turned me on to &lt;a target="_blank" href="http://www.ultrapico.com/Expresso.htm"&gt;Expresso&lt;/a&gt;, a free regular expressions authoring tool. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://drowningintechnicaldebt.com/dennisbottjer/WindowsLiveWriter/REGULAREXPRESSIONSWITHEXpresso_F960/image_2.png"&gt;&lt;img style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border="0" alt="image" width="336" height="312" src="http://drowningintechnicaldebt.com/dennisbottjer/WindowsLiveWriter/REGULAREXPRESSIONSWITHEXpresso_F960/image_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a9ccd0aa-4b14-4703-8708-4e79f70328d0" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/Regular%20Expressions"&gt;Regular Expressions&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Expresso"&gt;Expresso&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/101.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dennis Bottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2009/01/15/regular-expressions-with-expresso.aspx</guid>
            <pubDate>Thu, 15 Jan 2009 06:09:06 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/101.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2009/01/15/regular-expressions-with-expresso.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/101.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/101.aspx</trackback:ping>
        </item>
        <item>
            <title>Manipulating SharePoint Groups With Code</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2008/10/09/manipulating-sharepoint-groups-with-code.aspx</link>
            <description>&lt;h2&gt;SPWeb.Groups and SPWeb.SiteGroups&lt;/h2&gt;
&lt;p&gt;WSS 3.0 deprecates the site group concept used in WSS 2.0.  As a result manipulating groups and security objects through the object model can be less than obvious. &lt;/p&gt;
&lt;p&gt;For Example, a developer may try to add a group to a sub site (SPWeb) using this syntax SPWeb.Groups.Add(Group Name). However, in WSS 3.0 and MOSS 2007 this code will result in the following error: &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“You cannot add a group directly to the Groups collection. You can add a group to the SiteGroups collection.” &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To resolve this error and create a group use the following object model syntax:  SPWeb.SiteGroups.Add().  This code will create a new group at the site collection level. Groups created at the site collection level are basically the same as “Cross Site Groups” from WSS 2.0.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; All sub sites that are inheriting permissions from a parent site will see the groups added using SPWeb.SiteGroups.Add() when iterating through the SPWeb.Groups collection. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ref&lt;/strong&gt;: &lt;a href="http://msdn.microsoft.com/en-us/library/ms469194.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms469194.aspx&lt;/a&gt; &lt;/p&gt;
&lt;h2&gt;Associating a Group with a Site&lt;/h2&gt;
&lt;p&gt;It is important to realize that groups are never really “Added” to sites (SPWebs) but are instead associated. For example, if you have created a sub site that does not inherit permissions from its parent and you would like to “Add” a project manager group to that site you would use the following code. &lt;/p&gt;
&lt;div&gt;
&lt;div style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   1:&lt;/span&gt; &lt;span style="COLOR: #008000"&gt;// Get a reference a group by name.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   2:&lt;/span&gt; SPGroup oGroup = webSite.SiteGroups[groupName];&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   3:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   4:&lt;/span&gt; &lt;span style="COLOR: #008000"&gt;// Get the role definition to assign ex: Full Control&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   5:&lt;/span&gt; SPRoleDefinition oRole = webSite.RoleDefinitions[roleDefinition];&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   6:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   7:&lt;/span&gt; &lt;span style="COLOR: #008000"&gt;// Create the role assignment object&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   8:&lt;/span&gt; SPRoleAssignment oRoleAssignment = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; SPRoleAssignment(oGroup);&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  10:&lt;/span&gt; &lt;span style="COLOR: #008000"&gt;// Add the role definition to the role assignemnt. &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  11:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  12:&lt;/span&gt; &lt;span style="COLOR: #008000"&gt;// Assign the specific permission to the security principal for this role assignemnt.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  13:&lt;/span&gt; oRoleAssignment.RoleDefinitionBindings.Add(oRole);&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  14:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  15:&lt;/span&gt; &lt;span style="COLOR: #008000"&gt;// Add the role assignment to the web&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  16:&lt;/span&gt; webSite.RoleAssignments.Add(oRoleAssignment);&lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  17:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="BORDER-BOTTOM-STYLE: none; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;span style="COLOR: #606060"&gt;  18:&lt;/span&gt; webSite.Update();&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This code associates a site collection (Cross Site) Group with a SPWeb and assigns a role definition such as “Full Control.” With the code discussed in this post we could create a group, then give that group full control to a sub site.&lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:23914bdb-e8fc-4482-bea0-4fdd3add31ad" class="wlWriterSmartContent"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/SharePoint%20Security"&gt;SharePoint Security&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/SPWeb.Groups%20and%20SPWeb.SiteGroups"&gt;SPWeb.Groups and SPWeb.SiteGroups&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/Adding%20SharePoint%20Groups"&gt;Adding SharePoint Groups&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/94.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dennis Bottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2008/10/09/manipulating-sharepoint-groups-with-code.aspx</guid>
            <pubDate>Thu, 09 Oct 2008 08:05:43 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/94.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2008/10/09/manipulating-sharepoint-groups-with-code.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/94.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/94.aspx</trackback:ping>
        </item>
        <item>
            <title>Tampa 2007 Code Camp OBA Slides</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/18/tampa-2007-code-camp-oba-slides.aspx</link>
            <description>&lt;p mce_keep="true"&gt;I want to thank everyone who attended my session on Saturday.  I had been sick all week and was still feeling quite run down but we had some great discussions.  Office Business Applications (OBA) are really an excited way to look at developing or extending line-of-business applications.  As promised here are my slides and some important OBA links.&lt;/p&gt;&lt;a href="http://www.drowningintechnicaldebt.com/downloads/OBA_TampCodeCamp2007.ppt" mce_href="http://www.drowningintechnicaldebt.com/downloads/OBA_TampCodeCamp2007.ppt"&gt;Download Tamp 2007 Code Camp OBA Presentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=35409d4f-6d3d-4c1c-9390-cc0d70422ad6&amp;amp;displaylang=en"&gt;Supply Chain Management OBA Reference Pack&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/architecture/bb265266.aspx"&gt;Loan Origination Reference Pack&lt;/a&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/70.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/18/tampa-2007-code-camp-oba-slides.aspx</guid>
            <pubDate>Wed, 18 Jul 2007 12:29:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/70.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/18/tampa-2007-code-camp-oba-slides.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/70.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/70.aspx</trackback:ping>
        </item>
        <item>
            <title>Thoughts On Recursion</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/10/thoughts-on-recursion.aspx</link>
            <description>&lt;p&gt;Recursion is a computer science concept in which a method / function essentially calls itself until some condition is met.  Recursion can be an elegant solution to some logic problems.  However, I believe there are some potential dangers in using recursion that should carefully be consider.  Recursion is not an impossible concept to grasp it is just one that takes some thought.  The skill level of those maintaining an application should be considered before implementing recursion as it is a more advanced programming concept and could lead to serious performance issues of not implement correctly. &lt;/p&gt;&lt;pre&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;namespace&lt;/span&gt; RecursionTest
{
    &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;class&lt;/span&gt; Program
    {
        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;void&lt;/span&gt; Main(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;string&lt;/span&gt;[] args)
        {
               System.Console.WriteLine(calcFactorial(4));
               System.Console.ReadLine();	
         }


        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; calcFactorial(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;return&lt;/span&gt; n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;*&lt;/span&gt; calcFactorial(n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;-&lt;/span&gt; 1);
        }

    }
}&lt;/pre&gt;
&lt;p&gt;Did you spot the bug in the code above? The code never stops when the factorial is complete resulting in an infinite loop.  To fix the code we need to add a simple constraint or check. &lt;/p&gt;&lt;pre&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;namespace&lt;/span&gt; RecursionTest
{
    &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;class&lt;/span&gt; Program
    {
        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;void&lt;/span&gt; Main(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;string&lt;/span&gt;[] args)
        {
            Console.WriteLine(calcFactorial(4));
            Console.ReadLine();
        }


        &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; calcFactorial(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;int&lt;/span&gt; n)
        {
            &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;if&lt;/span&gt; (n == 1)
            {
                &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;return&lt;/span&gt; 1;
            }
            &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;else&lt;/span&gt;
            {
                &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;return&lt;/span&gt; n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;*&lt;/span&gt; calcFactorial(n &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: white"&gt;-&lt;/span&gt; 1);
            }
        }
    }
}&lt;/pre&gt;The recursive code above is very clean however as demonstrated it is easy to forget the constraint and introduce an infinite loop. I would also like to point out that from a performance standpoint recursion may not be the best choice.  It is often faster to use a looping structure where possible.  Finally, one must consider the impact recursion has on the managed stack in .NET.  Basically the deeper a thread's stack becomes the more difficult it becomes for the Garbage Collector to determine what should be collected and what is still in use.&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/69.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/10/thoughts-on-recursion.aspx</guid>
            <pubDate>Tue, 10 Jul 2007 10:45:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/69.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/07/10/thoughts-on-recursion.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/69.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/69.aspx</trackback:ping>
        </item>
        <item>
            <title>Office Business Applications Architecture Talk With Colin Cole</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/24/office-business-applications-architecture-talk-with-colin-cole.aspx</link>
            <description>&lt;p&gt;The following conversation is a conversation with Microsoft Financial Services Sr. Architect Colin Cole discussing Office Business Applications (OBA).  This is a new type of blog post for me and a &lt;a href="http://www.drowningintechnicaldebt.com/" mce_href="http://www.drowningintechnicaldebt.com/"&gt;Drowning In Technical Debt&lt;/a&gt; first.  I hope to conduct similar conversations in the future.  Finally, I would like to thank Colin for making time to have this conversation with me.&lt;br /&gt;&lt;br /&gt;dbottjer says: So I figured a good place to start would be with a definition.  What is OBA?  I did some research and here is what I came up with. Office Business Applications (OBA) use the Microsoft Office Suite of programs (Outlook, Word, Excel, etc) as a presentation layer for connecting line of business applications and executing business processes.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Cool, I have a few more things. &lt;br /&gt;&lt;br /&gt;dbottjer says: Ok great.&lt;br /&gt;&lt;br /&gt;Colin Cole says: OBA is kind of the centerpiece of what we call a "people ready" solution. &lt;br /&gt;&lt;br /&gt;Colin Cole says: It’s really about designing a solution to give the end user more control and agility to interact with the application.  Rather than having the IT defined screens with text boxes and validation. &lt;br /&gt;&lt;br /&gt;dbottjer says: The user has more control to personalize.&lt;br /&gt;&lt;br /&gt;Colin Cole says: You get instead something that brings data down to the tools you're familiar with (as you state), but also have server piece as well and that's where office server (SharePoint) comes in.  By exposing data through something like a SharePoint the business user can define their own reports bring the data down to a cube and open it up in excel.  Slice and Dice.  Create a dashboard. &lt;br /&gt;&lt;br /&gt;dbottjer says: Right&lt;br /&gt;&lt;br /&gt;Colin Cole says: Define their own KPI's.  Etc.  So like you state -- leveraging familiar tools, but also interacting with the solution data as appropriate for their role. &lt;br /&gt;&lt;br /&gt;dbottjer says: So this leads to the Problem. I thought that a good problem definition is: a fundamental inconsistency between how business systems work and how people work.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Agreed&lt;br /&gt;&lt;br /&gt;dbottjer says: Basically applications today are very rigid&lt;br /&gt;&lt;br /&gt;Colin Cole says: Absolutely, take an investment scenario for example.  The investor interacts with the canned application to analyze their portfolio.  But there's always 5-6 things they want to know to make business decisions that aren't available.  So what do they do?  They call IT and ask for a new report.  2 months later they get their report.  But by that time the need is totally different.  &lt;br /&gt;&lt;br /&gt;dbottjer says: Exactly.&lt;br /&gt;&lt;br /&gt;Colin Cole says: So the reality is they don't even bother....and just create their own one-off spreadsheets that aren't reused, etc.&lt;br /&gt;&lt;br /&gt;dbottjer says: So if they have an export feature they could export to Excel and do some quick processing there.&lt;br /&gt;&lt;br /&gt;dbottjer says: But that is an one-off.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Right.&lt;br /&gt;&lt;br /&gt;dbottjer says: So the idea of OBA is just to allow users to work in tools like Excel to begin with an augment excel with the missing services necessary for the problem domain.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Right, as well as interacting with dashboard/reporting type functionality bringing down tasks into Outlook, --like I showed you guys with our lending solution. Stuff like that.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;dbottjer says: I guess this leads us to why use OBA? OBA's offer a familiar interface – Most business users are familiar with at least one or more programs within the Microsoft Office Suite.  For example, Outlook is commonly used groupware that remains open throughout the business day on many corporate desktops.  It would seem like a win-win situation to take advantage of a program that users are already familiar with and that is running on their desktops.  Excel.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Exactly, why not plug a CRM tool into Outlook, since the sales folks are already familiar with the paradigm?&lt;br /&gt;&lt;br /&gt;dbottjer says: OBA integrates line of business applications such as Enterprise Resource Planning (ERP), Customer Relationship Management (CRM), and Supply Chain Management (SCM) in a presentation layer the user is already familiar with and productive in.  For example, a sales associate may depend heavily on Outlook to communicate with his/her clients.  The associate keeps To Do lists within Outlook and a calendar of all meetings.  Integrating the sales associate’s Outlook with CRM would centralize all the company’s customer information.  This would give the sales associate a place to add customer notes and perhaps a way to look up additional customer information such as support cases.&lt;br /&gt;&lt;br /&gt;Colin Cole says: Exactly.&lt;br /&gt;&lt;br /&gt;dbottjer says: So it seems like an efficient model for developing line of business applications? &lt;br /&gt;&lt;br /&gt;Colin Cole says: Right, obviously not for everything, but some % of apps it's a better fit.&lt;br /&gt;&lt;br /&gt;dbottjer says: Something else I noticed is that OBA is a great reuse story. For example, to implement an OBA solution you use an office product like Word, Excel, Outlook, SharePoint, etc. You also can use existing web services. Furthermore, you use VSTO and .NET.&lt;br /&gt;&lt;br /&gt;Colin Cole says: InfoPath plays nicely as well.  Especially the server forms stuff.  Very cool, each InfoPath form can have C# Code Behind, just like aspx.  It makes for a simple model to build professional looking web pages.&lt;br /&gt;&lt;br /&gt;dbottjer says: So OBA is a culmination of technologies to provide a business solution designed for how people work. It seems like OBA's have the potential to have a big impact in the line of business application space. &lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/67.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/24/office-business-applications-architecture-talk-with-colin-cole.aspx</guid>
            <pubDate>Thu, 24 May 2007 23:27:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/67.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/24/office-business-applications-architecture-talk-with-colin-cole.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/67.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/67.aspx</trackback:ping>
        </item>
        <item>
            <title>Understanding Composite Application Block Series</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/15/understanding-composite-application-block-series.aspx</link>
            <description>&lt;p mce_keep="true"&gt;We've been using the Composite Application Block (CAB) and Smart Client Software Factory (SCSF) since they first emerged.  Most of my focus has been on the middle tier and service layer which our smart client front ends consume.  However, recently we have needed more manpower building smartparts.  As result I've been refreshing my knowledge of the CAB and SCSF.  I found found a great blog series &lt;a href="http://geekswithblogs.net/kobush/category/3702.aspx"&gt;http://geekswithblogs.net/kobush/category/3702.aspx&lt;/a&gt; on understanding the cab.  The series does a great job defining the CAB terminology and explaining the basic architecture.&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/65.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/15/understanding-composite-application-block-series.aspx</guid>
            <pubDate>Tue, 15 May 2007 06:55:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/65.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/15/understanding-composite-application-block-series.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/65.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/65.aspx</trackback:ping>
        </item>
        <item>
            <title>DoNotExposeGenericLists recommends Collection&amp;lt;T&amp;gt; over List&amp;lt;T&amp;gt;</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/09/donotexposegenericlists-recommends-collectiont-over-listt.aspx</link>
            <description>&lt;p mce_keep="true"&gt;DoNotExposeGenericLists is a Code Analysis rule exposed within Visual Studio when List&amp;lt;T&amp;gt; is publically exposed.  For example, List&amp;lt;T&amp;gt; may be exposed through properties, methods, parameters, etc.  &lt;a class="" href="http://blogs.msdn.com/fxcop/archive/2006/04/27/585476.aspx" target="_blank" mce_href="http://blogs.msdn.com/fxcop/archive/2006/04/27/585476.aspx"&gt;Why does DoNotExposeGenericLists recommend that I expose Collection&lt;t&gt; instead of List&lt;t&gt;? [David Kean]&lt;/t&gt;&lt;/t&gt;&lt;/a&gt; explains that Collection&amp;lt;T&amp;gt; is the better choice b/c it exposes 4 overidable methods.  The methods are ClearItems, InsertItem, RemoveItem and SetItem.  Events can be raised from within these four methods to provide a notification when changes are made to the Collection.  &lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/63.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/09/donotexposegenericlists-recommends-collectiont-over-listt.aspx</guid>
            <pubDate>Wed, 09 May 2007 18:55:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/63.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/09/donotexposegenericlists-recommends-collectiont-over-listt.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/63.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/63.aspx</trackback:ping>
        </item>
        <item>
            <title>.NET 2.0 FailFast Method</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/08/failfast-method.aspx</link>
            <description>&lt;p&gt;[Dave] copied me on an email a few months back from a colleauge regarding the FailFast method.  This method was added to the .NET 2.0 framework and basically terminates a process without executing the any application Try-Finally or finalizer code.  Additionally, this method creates a memory dump for your application and writes a log entry to the Windows Application Event Log.&lt;/p&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/62.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/08/failfast-method.aspx</guid>
            <pubDate>Wed, 09 May 2007 01:07:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/62.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/08/failfast-method.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/62.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/62.aspx</trackback:ping>
        </item>
        <item>
            <title>Web Services and UTF8Encoded ByteArrays</title>
            <link>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/01/web-services-utf8encoded-bytearrays.aspx</link>
            <description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Our business partner began reporting all bullet points were being converted to question marks during the archiving of Word Docs.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;An early hunch that perhaps our FTP component was defaulting to ASCII transfer mode instead of Binary proved incorrect.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;With this option ruled out we knew our electronic document repository was properly receiving both the control file and the Word Doc.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;We began to suspect the web service exposed by our application which returns a document and metadata for archiving.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;We were using a byte array to store, in this case, the word document and write it to the http response stream.&lt;span style="mso-spacerun: yes"&gt;  &lt;/span&gt;However, we were not specifying the encoding type which was our fatal mistake.&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt" mce_keep="true"&gt;&lt;span class="lnum" /&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt" mce_keep="true"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;StringWriter sw = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringWriter();&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;XmlTextWriter xw = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextWriter(sw);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt;// Save Approval Document to Text Writter.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;doc.WriteTo(xw);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="rem"&gt;// Added this line to specify encoding and resolve bullet point issue.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;UTF8Encoding encoding = &lt;span class="kwrd"&gt;new&lt;/span&gt; UTF8Encoding();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="rem"&gt;// Convert Approval Document To Byte Array.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;byte&lt;/span&gt;[] docAsBytes = encoding.GetBytes(sw.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;vvDoc.FileBinary = docAsBytes;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://www.drowningintechnicaldebt.com/DennisBottjer/aggbug/60.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>dbottjer</dc:creator>
            <guid>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/01/web-services-utf8encoded-bytearrays.aspx</guid>
            <pubDate>Tue, 01 May 2007 10:06:00 GMT</pubDate>
            <wfw:comment>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/60.aspx</wfw:comment>
            <comments>http://www.drowningintechnicaldebt.com/DennisBottjer/archive/2007/05/01/web-services-utf8encoded-bytearrays.aspx#feedback</comments>
            <wfw:commentRss>http://www.drowningintechnicaldebt.com/DennisBottjer/comments/commentRss/60.aspx</wfw:commentRss>
            <trackback:ping>http://www.drowningintechnicaldebt.com/DennisBottjer/services/trackbacks/60.aspx</trackback:ping>
        </item>
    </channel>
</rss>