<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogit.create.pt/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tag 'ASP.NET'</title><link>http://blogit.create.pt/search/SearchResults.aspx?o=DateDescending&amp;tag=ASP.NET&amp;orTags=0</link><description>Search results matching tag 'ASP.NET'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>Using Deployment setting on Production Environment</title><link>http://blogit.create.pt/blogs/antoniovargas/archive/2010/03/02/Using-Deployment-attribute-on-Production-Environment.aspx</link><pubDate>Tue, 02 Mar 2010 10:02:00 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:2943</guid><dc:creator>antoniovargas</dc:creator><description>&lt;p&gt;When i studied for the &lt;a href="http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-562&amp;amp;locale=en-us"&gt;Microsoft exam (70-562, Microsoft .NET Framework 3.5, ASP.NET Application Development)&lt;/a&gt; i found an interesting setting that i didn&amp;rsquo;t known, the Deployment.&lt;/p&gt;&lt;p&gt;This configuration setting ensures that your application will override important application level settings used when you developed your web application. It will ensure that the following configurations are done:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;debug is set to false&lt;/li&gt;&lt;li&gt;page output tracing is disabled&lt;/li&gt;&lt;li&gt;force customErrors to be shown to remote users (it will ensure that the end user only see friendly error messages)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you want to activate this setting, you need to put the following configuration on the machine.config:&lt;/p&gt;&lt;p&gt;&amp;lt;configuration&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system.web&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&amp;lt;deployment retail=&amp;quot;true&amp;quot;/&amp;gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.web&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/configuration&amp;gt;&lt;/p&gt;&lt;p&gt;Some references:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms228298.aspx" title="http://msdn.microsoft.com/en-us/library/ms228298.aspx"&gt;deployment Element (ASP.NET Settings Schema)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://daptivate.com/archive/2008/02/12/top-10-best-practices-for-production-asp-net-applications.aspx"&gt;Top 10 Best Practices for Production ASP.NET Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>The Controls collection cannot be modified because the control contains code blocks (i.e. &amp;lt;% ... %&amp;gt;)</title><link>http://blogit.create.pt/blogs/ricardocosta/archive/2008/05/07/The-Controls-collection-cannot-be-modified-because-the-control-contains-code-blocks-_2800_i.e.-_3C002500_-_2E002E002E00_-_25003E002900_.aspx</link><pubDate>Wed, 07 May 2008 09:37:54 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:529</guid><dc:creator>ricardo.costa</dc:creator><description>&lt;p&gt;Because I have pages with the markup &amp;lt;%= someVariable%&amp;gt; like&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;
&lt;/span&gt;            
&lt;span style="color:blue;"&gt;  function &lt;/span&gt;ConfirmCallBack(arg)
  {
    &lt;span style="color:blue;"&gt;if &lt;/span&gt;(arg)
     &amp;lt;%= &lt;span style="color:blue;"&gt;this&lt;/span&gt;._nextPostBack%&amp;gt;
  }&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;I get the following error: &amp;quot;The Controls collection cannot be modified because the control contains code blocks (i.e. &amp;lt;% ... %&amp;gt;&amp;lt;% ... %&amp;gt;).&amp;quot;&lt;/p&gt;

&lt;p&gt;To correct it I had to change from &lt;/p&gt;

&lt;p&gt;&amp;lt;%= &lt;span style="color:blue;"&gt;this&lt;/span&gt;._nextPostBack%&amp;gt; &lt;/p&gt;

&lt;p&gt;to &lt;/p&gt;

&lt;p&gt;&amp;lt;%# &lt;span style="color:blue;"&gt;this&lt;/span&gt;._nextPostBack%&amp;gt;&lt;/p&gt;

&lt;p&gt;and in the PageLoad event add the call to Page's DataBind method&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;EventArgs &lt;/span&gt;e)
{&lt;/pre&gt;

&lt;pre class="code"&gt;  ...&lt;/pre&gt;

&lt;pre class="code"&gt;
  Page.DataBind();
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;</description></item><item><title>Codesmith, netTiers and reserved words</title><link>http://blogit.create.pt/blogs/ricardocosta/archive/2008/04/15/Codesmith_2C00_-netTiers-and-reserved-words.aspx</link><pubDate>Tue, 15 Apr 2008 11:05:00 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:515</guid><dc:creator>ricardo.costa</dc:creator><description>&lt;p&gt;Started today using &lt;a href="http://www.codesmithtools.com/" target="_blank"&gt;Codesmith&lt;/a&gt; tools today after a year or so since the last time that I used this great generation template based tool.&lt;/p&gt;  &lt;p&gt;I had to generate all the layers of an existent portal and I decided to use the &lt;a href="http://nettiers.com/" target="_blank"&gt;netTiers&lt;/a&gt; templates to accomplish this task.&lt;/p&gt;  &lt;p&gt;And here are the problems that I had to solve:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In the &lt;strong&gt;Entities&lt;/strong&gt; templates:&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I have a table named Entity that conflicts with the auxiliary class of the netTiers templates. It seems that the templates already generate a class called Entity and because there is a table called Entity there was a conflict.&lt;/p&gt;  &lt;p&gt;I solved that using the alias text file feature of the templates that allows me to define a alias for any table that I have. So I just inserted a new line in my alias text file like this:&lt;/p&gt;  &lt;p&gt;Entity:MyEntity&lt;/p&gt;  &lt;p&gt;With this alias, netTiers generated a class for my table named MyEntity that didn&amp;#39;t conflict with his own class Entity.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In the &lt;strong&gt;Data&lt;/strong&gt; templates:&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I had a table with two foreign keys. But the problem was that the foreign keys were on the same column of the table but referencing two different tables.&lt;/p&gt;  &lt;p&gt;The problem was that netTiers generated two methods with the same name and signature GetByColumnForeingKey.&lt;/p&gt;  &lt;p&gt;I had to change the schema and use two columns, each one referencing a different column in a different table.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In the &lt;strong&gt;Domain&lt;/strong&gt; templates:&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I have views in my database and I had compilation problems with the generated classes for these views.&lt;/p&gt;  &lt;p&gt;For each view there are two generated files/classes:&lt;/p&gt;  &lt;p&gt;MyView.cs and MyViewServiceBase.generated.cs&lt;/p&gt;  &lt;p&gt;Where MyView inherits from MyViewBase. Because MyViewBase doesn&amp;#39;t exist there was a compilation problem. I just had to strip the &amp;quot;Service&amp;quot; word from the netTiers templates so the file/class generated was MyViewBase.cs instead of MyViewServiceBase.cs&lt;/p&gt;  &lt;p&gt;Another problem was with a table with a &amp;quot;Type&amp;quot; column. This gives this error:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Error&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp; An object reference is required for the non-static field, method, or property &amp;#39;TableBase.Type.get&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp; Domain\TableBase.generated.cs&amp;nbsp;&amp;nbsp;&amp;nbsp; 1394&amp;nbsp;&amp;nbsp;&amp;nbsp; 57&amp;nbsp;&amp;nbsp;&amp;nbsp; Domain&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The generated code was&lt;/p&gt;  &lt;p&gt;DeepLoad(entity, false, DeepLoadType.ExcludeChildren, Type.EmptyTypes);&lt;/p&gt;  &lt;p&gt;I had to change the template so to genreate&lt;/p&gt;  &lt;p&gt;DeepLoad(entity, false, DeepLoadType.ExcludeChildren, System.Type.EmptyTypes);&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In the &lt;strong&gt;Data.SqlClient&lt;/strong&gt; templates:&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There was an ambiguous table named Parameter. netTiers already creates a class named Parameter so I just had to add another line in my alias text file&lt;/p&gt;  &lt;p&gt;Parameter:MyParameter&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;And finally in the &lt;strong&gt;web&lt;/strong&gt; templates:&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There was an ambiguous table named Page. I just had to add another line in my alias text file.&lt;/p&gt;  &lt;p&gt;Page:MyPage&lt;/p&gt;</description></item><item><title>Dealing with Memory Pressure problems in MOSS and WSS</title><link>http://blogit.create.pt/blogs/miguelisidoro/archive/2007/11/26/Dealing-with-Memory-Pressure-problems-in-MOSS-and-WSS.aspx</link><pubDate>Mon, 26 Nov 2007 22:29:40 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:437</guid><dc:creator>misidoro</dc:creator><description>&lt;p&gt;I just a found another great post about memory management and performance issues on the SharePoint platform. This article defines the concept of "Memory Pressure" and discusses in great detail the most common reasons for memory pressure situations and best practices on how to avoid them. For more details, click &lt;a href="http://blogs.technet.com/stefan_gossner/archive/2007/11/26/dealing-with-memory-pressure-problems-in-moss-wss.aspx" target="_blank"&gt;here&lt;/a&gt;.
&lt;/p&gt;</description></item><item><title>Page.EnableEventValidation and “Invalid postback or callback argument” error</title><link>http://blogit.create.pt/blogs/miguelisidoro/archive/2007/11/19/Page.EnableEventValidation-and-_1C20_Invalid-postback-or-callback-argument_1D20_-error.aspx</link><pubDate>Mon, 19 Nov 2007 12:39:00 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:433</guid><dc:creator>misidoro</dc:creator><description>&lt;p&gt;I developed a custom web part that basically renders a form and submits the entered data into a SharePoint list. The problem I was having is that when the form button was clicked, I got the following error:
&lt;/p&gt;&lt;p&gt;&amp;quot;Invalid postback or callback argument. Event validation is enabled&lt;br /&gt;using &amp;lt;pages enableEventValidation=&amp;quot;true&amp;quot;/&amp;gt; in configuration or &amp;lt;%@ Page&lt;br /&gt;EnableEventValidation=&amp;quot;true&amp;quot; %&amp;gt; in a page. For security purposes, this&lt;br /&gt;feature verifies that arguments to postback or callback events originate&lt;br /&gt;from the server control that originally rendered them. If the data is&lt;br /&gt;valid and expected, use the&lt;br /&gt;ClientScriptManager.RegisterForEventValidation method in order to&lt;br /&gt;register the postback or callback data for validation.&amp;quot;
&lt;/p&gt;&lt;p&gt;This error message is related to a new security enhancement brought by ASP.NET 2.0 called EventValidation. If enabled (default value), this new feature ensures that ASP.NET will only allow the specific events that are raised on a given control during a postback or callback. The main purpose of this security validation is to reduce the risk of &lt;a name="remarksToggle" title="remarksToggle"&gt;&lt;/a&gt;unauthorized postback requests and callbacks (more information on this &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.page.enableeventvalidation.aspx"&gt;here&lt;/a&gt;).  
&lt;/p&gt;&lt;p&gt;After some research on the Internet, two main approaches were given:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Set the &amp;lt;pages EnableEventValidation=&amp;quot;false&amp;quot; &amp;hellip;/&amp;gt; in the web.config or at the page level &amp;ndash; This is not a recommended approach due to the associated security risks, since event validation will not be performed and the risk of unauthorized postback requests and callbacks will increase.
&lt;/li&gt;&lt;li&gt;Use the Page.ClientScript.RegisterForEventValidation(ctrl. UniqueID) in the control &amp;ndash; this approach will register the given control and its events for event validation. This seemed like a good approach since it would allow maintaining the event validation but it didn&amp;#39;t solve the problem. Apparently, the internal variable _requestValueCollection of the Page class&lt;strong&gt;,&lt;/strong&gt; is never initialized, so method EnsureEventValidationFieldLoaded will never load the dictionary with UniqueIDs and therefore cannot find the control which is authorized to make postback via RegisterForEventValidation.
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;After this, I tried a different approach, more successfully. The web part is included in the context of a SharePoint page layout. After analyzing this web page, I found out that it included two nested &amp;lt;form&amp;gt;&amp;lt;/form&amp;gt; elements. After removing these elements, the form submission started working properly.&lt;/p&gt;</description></item><item><title>Add a custom section to web.config</title><link>http://blogit.create.pt/blogs/ricardocosta/archive/2007/10/23/Add-a-custom-section-to-web.config.aspx</link><pubDate>Tue, 23 Oct 2007 22:40:41 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:405</guid><dc:creator>ricardo.costa</dc:creator><description>&lt;p&gt;If you have created a custom section like &lt;a href="http://blogit.create.pt/blogs/ricardocosta/archive/2007/10/16/How-to-create-a-custom-section-for-an-application-config-file.aspx"&gt;this&lt;/a&gt;, and if you want to add it programmatically to web.config then you have to:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Use the WebConfigurationManager class and open the web
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Configuration config = WebConfigurationManager.OpenWebConfiguration(path, site);
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;From MSDN
&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:9pt;"&gt;&lt;em&gt;path
&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:9pt;"&gt;The virtual path to the configuration file. 
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:9pt;"&gt;&lt;em&gt;site
&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:9pt;"&gt;The name of the application Web site, as displayed in IIS configuration.
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a ConfigurationSectionGroup and add it to the Configuration object
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;ConfigurationSectionGroup sectionGroup = new ConfigurationSectionGroup();
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;config.SectionGroups.Add("GROUP_NAME", sectionGroup);
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Create a new instance of your section (MyCustomSection) and add it to the section group
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;MyCustomSection section = new MyCustomSection ();
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;sectionGroup.Sections.Add("SECTION_NAME", section);
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Fill your custom section properties
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;section.Property1 = "0123456789";
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;section.Property2 = "Lorem ipsum dolor sit amet";
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;ol&gt;&lt;li&gt;And save the configuration
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;config.Save();
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you take a look at your web.config you will see that it was modified programmatically as you specified. I use this technique in the setup process of sites. Cool!&lt;/p&gt;</description></item><item><title>Different web.configs</title><link>http://blogit.create.pt/blogs/ricardocosta/archive/2007/05/25/Different-web.configs.aspx</link><pubDate>Fri, 25 May 2007 09:16:00 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:352</guid><dc:creator>ricardo.costa</dc:creator><description>&lt;p&gt;In the project that I&amp;#39;m currently working I had a problem because my connection strings are different from the other developers: I want to work locally in my SQL Express so the connections strings are different and since we are developing with Visual Source Safe 2005 as the version control system it is not possible to change the file where the connections strings are stored.
&lt;/p&gt;&lt;p&gt;The easiest way was not to keep the web.config file under source control but of course that wasn&amp;#39;t the desired way because we have lots of settings that we want to keep under source control.
&lt;/p&gt;&lt;p&gt;After &lt;em&gt;googling&lt;/em&gt; a while I found that the appSettings section in the web.config file of an ASP.NET web application has an attribute - &lt;strong&gt;&lt;em&gt;file&lt;/em&gt;&lt;/strong&gt; &amp;ndash; that can point to an external file where we can store additional settings.
&lt;/p&gt;&lt;p&gt;So my initial web.config file is:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1_ConnectionStringName&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2_ConnectionStringName&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;server=db_server;database=db_1; &amp;hellip; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;providerName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Data.SqlClient&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;server=db_server;database=DB_2; &amp;hellip; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;providerName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Data.SqlClient&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Of course, when I want to work locally in my SQL Express instance this doesn&amp;#39;t work. So I changed the web.config file like this:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;custom.config&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1_ConnectionStringName&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2_ConnectionStringName&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;server=db_server;database=db_1; &amp;hellip; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;providerName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Data.SqlClient&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;server=db_server;database=DB_2; &amp;hellip; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;providerName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Data.SqlClient&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1_LOCAL&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;server=.\SQLEXPRESS;database=db_1; &amp;hellip; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;providerName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Data.SqlClient&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2_LOCAL&lt;/span&gt; &amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;server=db_.\SQLEXPRESS;database=DB_2; &amp;hellip; &lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;providerName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;System.Data.SqlClient&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;And my custom.config file is:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1_ConnectionStringName&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_1_LOCAL&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2_ConnectionStringName&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;
			&lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;DB_2_LOCAL&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:9pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;What happens is that the settings in the custom.config file override the settings in the web.config file.
&lt;/p&gt;&lt;p&gt;The other developers don&amp;#39;t need to have the custom.config files because &amp;quot;the runtime ignores the attribute, if the specified file cannot be found&amp;quot; [&lt;a href="http://msdn2.microsoft.com/en-us/library/ms228154.aspx" target="_blank"&gt;msdn&lt;/a&gt;].
&lt;/p&gt;&lt;p&gt;So I have only the custom.config file that it isn&amp;#39;t under source control but that&amp;#39;s no problem because I only redefine the name of the connection strings. The actual connection strings are still stored in the web.config file and under source control.
&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Posting back in a modal popup</title><link>http://blogit.create.pt/blogs/raulribeiro/archive/2007/05/23/Posting-back-in-a-modal-popup.aspx</link><pubDate>Wed, 23 May 2007 09:44:00 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:350</guid><dc:creator>rrr</dc:creator><description>&lt;p&gt;If you have a server-side form that needs to post back to itself, and that form is in a window made available through window.showModalDialog call, the postback will cause a new, blank window to be shown.&amp;nbsp; &lt;/p&gt;&lt;p&gt;The best way to solve this problem is to include the following tag in the &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#800000"&gt;head&lt;/font&gt;/&amp;gt;&lt;/font&gt; section of your HTML source:&lt;br /&gt;&lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#800000"&gt;base&lt;/font&gt; &lt;font color="#ff0000"&gt;target&lt;/font&gt;=&amp;quot;_self&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</description></item><item><title>Setting the original file name when using Response.BinaryWrite()</title><link>http://blogit.create.pt/blogs/ricardocosta/archive/2006/11/16/Setting-the-original-file-name-when-using-Response.BinaryWrite_28002900_.aspx</link><pubDate>Thu, 16 Nov 2006 14:15:00 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:241</guid><dc:creator>ricardo.costa</dc:creator><description>&lt;p&gt;Imagine you have file saved in a database.&amp;nbsp;Then you&amp;nbsp;have an aspx page that gets that page and sends it back to the user.&lt;/p&gt;&lt;p&gt;If you just simply use Response.BinaryWrite you get the browser&amp;#39;s download dialog box and the file&amp;#39;s name will be the aspx page&amp;#39;s name. If you want to force the original file name you have to add an header to the response like this:&lt;/p&gt;&lt;font size="2"&gt;&lt;p&gt;&lt;em&gt;Response.AddHeader(&amp;quot;Content-Disposition&amp;quot;, &lt;/em&gt;&lt;font size="2"&gt;&lt;em&gt;&amp;quot;inline;filename=ORIGINAL_FILENAME&amp;quot;);&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;</description></item><item><title>Aprovisionamento de sites no IIS6 usando uma aplica&amp;#231;&amp;#227;o ASP.NET</title><link>http://blogit.create.pt/blogs/miguelisidoro/archive/2006/11/06/Aprovisionamento-de-sites-no-IIS6-usando-uma-aplica_E700E300_o-ASP.NET.aspx</link><pubDate>Mon, 06 Nov 2006 22:33:00 GMT</pubDate><guid isPermaLink="false">82e6d864-cc1c-4326-bdf8-b027608494f4:207</guid><dc:creator>misidoro</dc:creator><description>&lt;div&gt;O exemplo apresentado de seguida permite efectuar a cria&amp;ccedil;&amp;atilde;o de um site no IIS6&amp;nbsp;a partir de uma template. Esta solu&amp;ccedil;&amp;atilde;o torna-se particularmente &amp;uacute;til para cen&amp;aacute;rios em que seja necess&amp;aacute;rio efectuar o aprovisionamento de v&amp;aacute;rios sites com a mesma estrutura, composta tipicamente por um conjunto de directorias virtuais. Para efectuar a cria&amp;ccedil;&amp;atilde;o de uma template de site &amp;eacute; apenas necess&amp;aacute;rio, na consola de administra&amp;ccedil;&amp;atilde;o do IIS, exportar a configura&amp;ccedil;&amp;atilde;o de um site com a estrutura pretendida para ficheiro (para mais detalhes sobre este processo, cliquem &lt;a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/85d69588-c6de-44aa-a75d-542529577cec.mspx?mfr=true" title="Creating a Web Site from a Template (IIS 6.0)" target="_blank"&gt;aqui&lt;/a&gt;). A template obtida &amp;eacute; um ficheiro xml, designado por ficheiro de metabase do site, contendo toda a configura&amp;ccedil;&amp;atilde;o de um site. Para mais detalhes sobre a metabase do IIS6, cliquem &lt;a href="http://www.windowsdevcenter.com/pub/a/windows/2004/07/13/iis_metabase.html" title="Inside the XML Metabase of IIS 6" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;h4&gt;A solu&amp;ccedil;&amp;atilde;o&lt;/h4&gt;&lt;div&gt;A solu&amp;ccedil;&amp;atilde;o apresentada de seguida pode ser decomposta nos seguintes passos:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Cria&amp;ccedil;&amp;atilde;o do novo site&lt;/li&gt;&lt;li&gt;Gera&amp;ccedil;&amp;atilde;o da configura&amp;ccedil;&amp;atilde;o do novo site com base na configura&amp;ccedil;&amp;atilde;o do site base&lt;/li&gt;&lt;li&gt;Importa&amp;ccedil;&amp;atilde;o da configura&amp;ccedil;&amp;atilde;o do novo site&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;As opera&amp;ccedil;&amp;otilde;es realizadas durante o processo de cria&amp;ccedil;&amp;atilde;o de um site fazem uso de dois scripts de base do IIS, localizados na directoria C:\Windows\System32:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Iisweb.vbs&lt;/strong&gt;: permite efectuar todas as opera&amp;ccedil;&amp;otilde;es de gest&amp;atilde;o de um site (cria&amp;ccedil;&amp;atilde;o, remo&amp;ccedil;&amp;atilde;o, etc). Para mais detalhes, cliquem &lt;a href="http://support.microsoft.com/kb/816568" title="HOW TO Manage Web Sites and Web Virtual Directories by Using Command-Line Scripts in IIS 6.0" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;iiscnfg.vbs&lt;/strong&gt;: permite efectuar as opera&amp;ccedil;&amp;otilde;es de gest&amp;atilde;o da configura&amp;ccedil;&amp;atilde;o de um site (exporta&amp;ccedil;&amp;atilde;o e importa&amp;ccedil;&amp;atilde;o de configura&amp;ccedil;&amp;atilde;o, etc). Para mais detalhes, cliquem &lt;a href="http://technet2.microsoft.com/WindowsServer/en/library/46e15c9a-fd7c-4c1e-aaa6-0767ccd6fdd11033.mspx?mfr=true" title="Iiscnfg.vbs IIS configuration script" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Cria&amp;ccedil;&amp;atilde;o do novo site&lt;/h4&gt;&lt;div&gt;Neste passo, &amp;eacute; efectuada a cria&amp;ccedil;&amp;atilde;o do site no IIS. De referir que no processo de cria&amp;ccedil;&amp;atilde;o um site no IIS6, podem ser utilizados tr&amp;ecirc;s modos de acesso:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Endere&amp;ccedil;o IP&lt;/strong&gt; &amp;ndash; permite a defini&amp;ccedil;&amp;atilde;o de um endere&amp;ccedil;o IP como modo de acesso do site. Deste modo, o porto 80 pode ser usado por mais do que um site desde que sejam usados endere&amp;ccedil;os IP diferentes.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Porto&lt;/strong&gt; &amp;ndash; permite a defini&amp;ccedil;&amp;atilde;o de um porto como modo de acesso do site. Deste modo, tem que ser usado um porto diferente para cada site mas permite o uso do mesmo endere&amp;ccedil;o IP.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Host Header&lt;/strong&gt; &amp;ndash; um host header, tal como o nome indica, &amp;eacute; um cabe&amp;ccedil;alho definido ao n&amp;iacute;vel do site e permite que diversos sites utilizem o mesmo porto para o mesmo endere&amp;ccedil;o IP. Exemplos de host headers s&amp;atilde;o &amp;ldquo;www.create.pt&amp;rdquo; ou &amp;ldquo;blogit.create.pt&amp;rdquo; (o URL que se pretende para o acesso externo ao site sem &amp;ldquo;http//&amp;rdquo;). Um pedido HTTP chega ao servidor web e o utilizador &amp;eacute; redireccionado para o site correcto com base no URL. Como nota final, de referir que usando host headers, &amp;eacute; necess&amp;aacute;rio criar uma entrada no DNS por cada site criado a apontar para o endere&amp;ccedil;o IP externo do servidor web.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Para mais detalhes sobre o processo de cria&amp;ccedil;&amp;atilde;o de um site no IIS6, cliquem &lt;a href="http://www.simongibson.com/intranet/iis6/" title="Internet Information Services 6 Tutorial (Windows Server 2003)" target="_blank"&gt;aqui&lt;/a&gt;. &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;O seguinte m&amp;eacute;todo &amp;eacute; respons&amp;aacute;vel pela cria&amp;ccedil;&amp;atilde;o do site. O site, nesta fase, n&amp;atilde;o &amp;eacute; iniciado, apenas o sendo no final. &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//constantes usadas ao longo dos exemplos&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; IIS_WEB_COMMAND = &lt;span style="color:maroon;"&gt;@&amp;quot;C:\WINDOWS\system32\iisWeb.vbs&amp;quot;&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; IIS_CONFIG_COMMAND = &lt;span style="color:maroon;"&gt;@&amp;quot;C:\WINDOWS\system32\iisCnfg.vbs&amp;quot;&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; WINDOWS_COMMAND = &lt;span style="color:maroon;"&gt;&amp;quot;cmd&amp;quot;&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; SITEPATH_REGULAR_EXPRESSION = &lt;span style="color:maroon;"&gt;@&amp;quot;W3SVC/\d*&amp;quot;&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; CreateSite(&lt;span style="color:blue;"&gt;string&lt;/span&gt; webSiteHomeDirectory, &lt;span style="color:blue;"&gt;string&lt;/span&gt; siteName, &lt;span style="color:blue;"&gt;string&lt;/span&gt; ip, &lt;span style="color:blue;"&gt;string&lt;/span&gt; port, &lt;span style="color:blue;"&gt;string&lt;/span&gt; hostHeader)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process process = &lt;span style="color:blue;"&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;font color="#000000"&gt; Process();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.EnableRaisingEvents = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//criar site mas n&amp;atilde;o arranc&amp;aacute;-lo&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//iisweb /create &amp;lt;directoria&amp;gt; &amp;lt;nome&amp;gt; /donstart&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:teal;"&gt;StringBuilder&lt;/span&gt; commandArguments = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;StringBuilder&lt;/span&gt;(&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;@&amp;quot; /create {0} {1} /dontstart&amp;quot;&lt;/span&gt;, webSiteHomeDirectory, siteName));&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//modo de acesso por endere&amp;ccedil;o IP&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (ip != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; ip.Trim().Length &amp;gt; 0)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandArguments.Append(&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;&amp;quot; /i {0}&amp;quot;&lt;/span&gt;, ip));&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//modo de acesso por porto&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (port != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; port.Trim().Length &amp;gt; 0)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandArguments.Append(&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;&amp;quot; /b {0}&amp;quot;&lt;/span&gt;, port));&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//modo de acesso por host header&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (hostHeader != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; hostHeader.Trim().Length &amp;gt; 0)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandArguments.Append(&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;&amp;quot; /d {0}&amp;quot;&lt;/span&gt;, hostHeader));&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//assignar o script a correr&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.FileName = IIS_WEB_COMMAND;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.Arguments = commandArguments.ToString();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;/iniciar o processo&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.Start();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.WaitForExit();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//retornar c&amp;oacute;digo de execu&amp;ccedil;&amp;atilde;o do processo. Retorna 0 se tudo correr bem.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt; process.ExitCode;&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;Ao longo dos exemplos, &amp;eacute; utilizada a classe System.Diagnostics.Process para efectuar a execu&amp;ccedil;&amp;atilde;o dos scripts do IIS. Para mais detalhes sobre esta classe, cliquem &lt;a href="http://msdn2.microsoft.com/en-us/library/system.diagnostics.process(VS.80).aspx" title="Process Class (System.Diagnostics)" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;&lt;h4&gt;Gera&amp;ccedil;&amp;atilde;o da configura&amp;ccedil;&amp;atilde;o do novo site com base na configura&amp;ccedil;&amp;atilde;o do site base&lt;/h4&gt;&lt;p style="margin:0px;"&gt;Neste passo, &amp;eacute; lida o ficheiro de metabase do site base e gerado a partir deste, o ficheiro de configura&amp;ccedil;&amp;atilde;o do novo site. As altera&amp;ccedil;&amp;otilde;es a efectuar &amp;agrave; configura&amp;ccedil;&amp;atilde;o base s&amp;atilde;o compostos tipicamente por:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="margin:0px;"&gt;Altera&amp;ccedil;&amp;atilde;o do ID do site para o ID do novo site&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin:0px;"&gt;Altera&amp;ccedil;&amp;atilde;o da directoria do site (e das directorias virtuais se existirem) para as do novo site&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin:0px;"&gt;Alterar o nome do site para o do novo site&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="margin:0px;"&gt;Alterar o host header para o do novo site&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin:0px;"&gt;O seguinte m&amp;eacute;todo &amp;eacute; respons&amp;aacute;vel pela gera&amp;ccedil;&amp;atilde;o do ficheiro de metabase do novo site. Este ficheiro ser&amp;aacute; posteriormente utilizado para importar a configura&amp;ccedil;&amp;atilde;o do novo site. De referir que tratando-se o ficheiro de metabase um ficheiro xml, foi utilizada a classe XmlDocument para efectuar a manipula&amp;ccedil;&amp;atilde;o do mesmo. &lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div style="margin:0px;"&gt;&lt;/div&gt;&lt;div style="margin:0px;"&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; CreateSiteTemplateXml(&lt;span style="color:blue;"&gt;string&lt;/span&gt; xmlConfigPath, &lt;span style="color:blue;"&gt;string&lt;/span&gt; masterWebID, &lt;span style="color:blue;"&gt;string&lt;/span&gt; createdWebID, &lt;span style="color:blue;"&gt;string&lt;/span&gt; siteName, &lt;span style="color:blue;"&gt;string&lt;/span&gt; hostHeader)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlDocument xmlDocument = &lt;span style="color:blue;"&gt;new&lt;/span&gt; XmlDocument();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//ler ficheiro de metabase do site base&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDocument.Load(xmlConfigPath);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//seleccionar elemento xml IISWebServer da metabase&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNodeList xmlNodeList = xmlDocument.DocumentElement.SelectNodes(&amp;ldquo;./MBProperty/IIsWebServer&amp;rdquo;);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//substituir host header&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;(XmlNode xmlNode &lt;span style="color:blue;"&gt;in&lt;/span&gt; xmlNodeList)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlAttribute = XmlHelper.GetAttribute(xmlNode.Attributes, &amp;ldquo;ServerBindings&amp;rdquo;);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; serverBinding = xmlAttribute.Value;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; [] serverBindings = serverBinding.Split(&lt;span style="color:maroon;"&gt;&amp;#39;:&amp;#39;&lt;/span&gt;);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; oldHostHeader = serverBindings[serverBindings.Length - 1];&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlAttribute.Value = xmlAttribute.Value.Replace(oldHostHeader, hostHeader);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//substituir nome site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;(XmlNode xmlNode &lt;span style="color:blue;"&gt;in&lt;/span&gt; xmlNodeList)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlAttribute = XmlHelper.GetAttribute(xmlNode.Attributes, &amp;ldquo;ServerComment&amp;rdquo;);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlAttribute.Value = xmlAttribute.Value.Replace(xmlAttribute.Value, siteName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//seleccionar elemento xml IIsWebVirtualDir da metabase&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlNodeList = xmlDocument.DocumentElement.SelectNodes(&amp;ldquo;./MBProperty/IIsWebVirtualDir&amp;rdquo;);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;(XmlNode xmlNode &lt;span style="color:blue;"&gt;in&lt;/span&gt; xmlNodeList)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//substituir atributo AppRoot com o id do novo site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlAttribute = XmlHelper.GetAttribute(xmlNode.Attributes, &amp;ldquo;AppRoot&amp;rdquo;);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlAttribute.Value = xmlAttribute.Value.Replace(masterWebID, createdWebID);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//substituir directorias do site (existe um elemento IIsWebVirtualDir para a root e para cada directoria virtual). Este&amp;nbsp;exemplo assume que os nomes das directorias do site ir&amp;atilde;o conter o id do site no IIS, sendo substituido o id do site base pelo id do novo site. Ex: C:\inetpub\wwwroot\site&amp;lt;idsitebase&amp;gt; -&amp;gt; C:\inetpub\wwwroot\site&amp;lt;idsitenovo&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt;(XmlNode xmlNode &lt;span style="color:blue;"&gt;in&lt;/span&gt; xmlNodeList)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlAttribute = XmlHelper.GetAttribute(xmlNode.Attributes, &amp;ldquo;&lt;span style="color:teal;"&gt;Path&lt;/span&gt;&amp;rdquo;);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlAttribute.Value = xmlAttribute.Value.Replace(masterWebID, createdWebID);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//gerar ficheiro metabase novo site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; newPath = &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;&amp;quot;{0}{1}.xml&amp;quot;&lt;/span&gt;, xmlConfigPath.Replace(&lt;span style="color:maroon;"&gt;&amp;quot;.xml&amp;quot;&lt;/span&gt;, &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Empty), createdWebID.Replace(Constants.IISWebSiteIdentifierPrefix, &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Empty));&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlDocument.Save(newPath);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//retornar caminho para ficheiro metabase do novo site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt; newPath;&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h4&gt;Importa&amp;ccedil;&amp;atilde;o da configura&amp;ccedil;&amp;atilde;o do novo site&lt;/h4&gt;&lt;p style="margin:0px;"&gt;Neste passo, &amp;eacute; efectuada a importa&amp;ccedil;&amp;atilde;o da configura&amp;ccedil;&amp;atilde;o criada no passo anterior. O seguinte m&amp;eacute;todo e respons&amp;aacute;vel por esta opera&amp;ccedil;&amp;atilde;o.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; ImportSiteConfiguration(&lt;span style="color:blue;"&gt;string&lt;/span&gt; xmlConfigPath, &lt;span style="color:blue;"&gt;string&lt;/span&gt; masterWebID, &lt;span style="color:blue;"&gt;string&lt;/span&gt; createdWebID)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process process = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Process();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.EnableRaisingEvents=&lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; commandArguments = &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;@&amp;quot; /import /f &amp;quot;&amp;quot;{0}&amp;quot;&amp;quot; /sp /LM/{1}/root /dp /LM/{2}/root /children&amp;quot;&lt;/span&gt;, xmlConfigPath, masterWebID, createdWebID);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.FileName = IIS_CONFIG_COMMAND;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.Arguments = commandArguments;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.Start();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.WaitForExit();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt; process.ExitCode;&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;h4&gt;O processo de cria&amp;ccedil;&amp;atilde;o do site&lt;/h4&gt;&lt;p style="margin:0px;"&gt;O m&amp;eacute;todo seguinte&amp;nbsp;efectua a chamada a cada uma dos m&amp;eacute;todos anteriores e alguns m&amp;eacute;todos auxiliares para efectuar o processo de cria&amp;ccedil;&amp;atilde;o do site.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; CreateNewWebSite(&lt;span style="color:blue;"&gt;string&lt;/span&gt; webSiteHomeDirectory, &lt;span style="color:blue;"&gt;string&lt;/span&gt; webSiteBackOfficeFolder, &lt;span style="color:blue;"&gt;string&lt;/span&gt; siteName, &lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;string&lt;/span&gt; ip, &lt;span style="color:blue;"&gt;string&lt;/span&gt; port, &lt;span style="color:blue;"&gt;string&lt;/span&gt; hostHeader)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //criar site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;int&lt;/span&gt; createSiteResult = CreateSite(webSiteHomeDirectory, siteName, &lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;null&lt;/span&gt;, hostHeader);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (createSiteResult == 0) &lt;span style="color:green;"&gt;//cria&amp;ccedil;&amp;atilde;o site ok&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//obter id do novo site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; createdSiteID = GetSiteID(siteName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//gerar ficheiro configura&amp;ccedil;&amp;atilde;o novo site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; xmlConfigPath = CreateSiteTemplateXml(webSiteHomeDirectory, webSiteBackOfficeFolder, Settings.MasterWebSiteXmlConfigurationPath, &lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Settings.MasterWebSiteID, createdSiteID, siteName, hostHeader);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//importar configura&amp;ccedil;ao novo site&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;int&lt;/span&gt; importSiteResult = ImportSiteConfiguration(xmlConfigPath, Settings.MasterWebSiteID, createdSiteID);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (importSiteResult == 0) &lt;span style="color:green;"&gt;//importa&amp;ccedil;&amp;atilde;o ok&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; StartSite(siteName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;h4&gt;Outros M&amp;eacute;todos Utilizados&lt;/h4&gt;&lt;p style="margin:0px;"&gt;Foram ainda utilizados os seguintes m&amp;eacute;todos:&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;strong&gt;GetSiteID&lt;/strong&gt;: m&amp;eacute;todo que obt&amp;eacute;m o id do site a partir do nome.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; GetSiteID(&lt;span style="color:blue;"&gt;string&lt;/span&gt; siteName)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; commandToExecute = &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;@&amp;quot;{0} /query {1}&amp;quot;&lt;/span&gt;, IIS_WEB_COMMAND, siteName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; commandResult = RunShellCommand(commandToExecute);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;string&lt;/font&gt; siteID = GetRegularExpressionResult(SITEPATH_REGULAR_EXPRESSION, commandResult);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt; siteID;&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;strong&gt;RunShellCommand&lt;/strong&gt;: m&amp;eacute;todo que executa um comando externo e obt&amp;eacute;m o resultado da sua execu&amp;ccedil;&amp;atilde;o.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; RunShellCommand(&lt;span style="color:blue;"&gt;string&lt;/span&gt; shellCommandToExecute)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process process = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Process();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.EnableRaisingEvents=&lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//obter nome ficheiro tempor&amp;aacute;rio&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; tempFileName = &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;@&amp;quot;{0}\{1}.txt&amp;quot;&lt;/span&gt;, Settings.WebSiteCreationTempFolder, &lt;span style="color:teal;"&gt;DateTime&lt;/span&gt;.Now.ToString(FILE_DATETIME_FORMAT));&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//executar comando e escrever resultado para ficheiro&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; commandArguments = &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;@&amp;quot; /c {0} &amp;gt; {1}&amp;quot;&lt;/span&gt;, shellCommandToExecute, tempFileName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.FileName = WINDOWS_COMMAND;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.Arguments = commandArguments;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.Start();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.WaitForExit();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//ler resultados de ficheiro tempor&amp;aacute;rio&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:teal;"&gt;StreamReader&lt;/span&gt; streamReader = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;StreamReader&lt;/span&gt;(tempFileName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s&lt;span style="color:blue;"&gt;tring&lt;/span&gt; commandResults = streamReader.ReadToEnd();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;streamReader.Close();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//apagar ficheiro tempor&amp;aacute;rio&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:teal;"&gt;File&lt;/span&gt;.Delete(tempFileName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;//devolver resultado&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt; commandResults;&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;strong&gt;GetRegularExpressionResult&lt;/strong&gt;: m&amp;eacute;todo que aplica uma express&amp;atilde;o regular a uma string.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; GetRegularExpressionResult(&lt;span style="color:blue;"&gt;string&lt;/span&gt; pattern, &lt;span style="color:blue;"&gt;string&lt;/span&gt; inputString)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Regex regex = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Regex(pattern, RegexOptions.IgnoreCase);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MatchCollection matches = regex.Matches(inputString);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;return&lt;/span&gt; matches.Count == 1 ? matches[0].Value : &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Empty;&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;strong&gt;StartSite&lt;/strong&gt;: m&amp;eacute;todo que inicia o site.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; StartSite(&lt;span style="color:blue;"&gt;string&lt;/span&gt; siteName)&lt;/p&gt;&lt;p style="margin:0px;"&gt;{&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Process &lt;span style="color:blue;"&gt;new&lt;/span&gt; Process();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.EnableRaisingEvents=&lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;string&lt;/span&gt; commandArguments = &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;@&amp;quot; /start {0} &amp;quot;&lt;/span&gt;, siteName);&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.FileName = IIS_WEB_COMMAND;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.StartInfo.Arguments = commandArguments;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.Start();&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;process.WaitForExit();&lt;/p&gt;&lt;p style="margin:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;&lt;h4&gt;Seguran&amp;ccedil;a&lt;/h4&gt;&lt;p style="margin:0px;"&gt;Existem quest&amp;otilde;es de seguran&amp;ccedil;a associadas &amp;agrave; cria&amp;ccedil;&amp;atilde;o de sites no IIS6 a partir de uma aplica&amp;ccedil;&amp;atilde;o ASP.NET. Por omiss&amp;atilde;o, uma aplica&amp;ccedil;&amp;atilde;o ASP.NET a correr sobre IIS6, &amp;eacute; executada usando uma conta de servi&amp;ccedil;o com permiss&amp;otilde;es muito restritas (conta &amp;ldquo;Network Service&amp;rdquo;). Para se criar um site no IIS, &amp;eacute; necess&amp;aacute;rio ter permiss&amp;otilde;es de administra&amp;ccedil;&amp;atilde;o. Qualquer solu&amp;ccedil;&amp;atilde;o para resolver este problema implica riscos em termos de seguran&amp;ccedil;a, sendo o objectivo encontrar uma solu&amp;ccedil;&amp;atilde;o que mitigue estes riscos. Uma solu&amp;ccedil;&amp;atilde;o poss&amp;iacute;vel &amp;eacute; a cria&amp;ccedil;&amp;atilde;o de um web service que fica respons&amp;aacute;vel pela cria&amp;ccedil;&amp;atilde;o de sites. Este web service seria colocado no IIS numa segunda Web Application a correr numa Application Pool executada com uma conta de servi&amp;ccedil;o com permiss&amp;otilde;es de administra&amp;ccedil;&amp;atilde;o. Desta forma, a aplica&amp;ccedil;&amp;atilde;o ASP.NET continuaria a correr com a conta de servi&amp;ccedil;o de permiss&amp;otilde;es restritas, sendo a cria&amp;ccedil;&amp;atilde;o de sites a &amp;uacute;nica opera&amp;ccedil;&amp;atilde;o a correr com permiss&amp;otilde;es de administra&amp;ccedil;&amp;atilde;o. Outras medidas de seguran&amp;ccedil;a podem ser implementadas, encontrando-se entre elas efectuar a restri&amp;ccedil;&amp;atilde;o do acesso ao web service, de forma a que possa ser chamado apenas a partir da m&amp;aacute;quina onde se encontra a aplica&amp;ccedil;&amp;atilde;o ASP.NET.&lt;/p&gt;&lt;h4&gt;Resumo&lt;/h4&gt;&lt;p style="margin:0px;"&gt;A solu&amp;ccedil;&amp;atilde;o aqui apresentada permite efectuar a cria&amp;ccedil;&amp;atilde;o de sites no IIS6 a partir de uma template de site usando uma aplica&amp;ccedil;&amp;atilde;o ASP.NET. &amp;Eacute; uma solu&amp;ccedil;&amp;atilde;o bastante flex&amp;iacute;vel, na medida em que pode ser usada para efectuar o aprovisionamento de sites a partir de qualquer template. Para tal, basta criar um ficheiro xml de metabase de um site, resultado da exporta&amp;ccedil;&amp;atilde;o da configura&amp;ccedil;&amp;atilde;o de um site para ficheiro.&lt;/p&gt;</description></item></channel></rss>