<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Heikki Ritvanen</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/heikkiri/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/heikkiri/feed.xml</link>
    <description>Collection Of Things That Keep Me Going At Night Time While Everyone Else Is A Sleep.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:48:48 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Second Attempt On Blogging</title>
      <link>https://docs.microsoft.com/archive/blogs/heikkiri/second-attempt-on-blogging</link>
      <pubDate>Tue, 17 Jul 2012 15:48:33 GMT</pubDate>
      <dc:creator><![CDATA[Heikki K. Ritvanen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/heikkiri/2012/07/17/second-attempt-on-blogging/</guid>
      <description><![CDATA[I have never been confused with Shakespeare, rather been known for my Finglish with car analogies....]]></description>
      <content:encoded><![CDATA[<p>I have never been confused with Shakespeare, rather been known for my Finglish with car analogies. So, I am sure that you will encounter few of them if you read my posts. I think that one of my main reasons for this is that I have worked in support over 10 years. Most of the time, I have spent in the server world debugging various application. Microsoft or custom. Before joining the Microsoft support, I worked as a software developer and I truly enjoy it. So, over the years I have come up with various ways to either accomplish a task or just to prove a point that it can be done. Now, as getting older I don't seem to remember those things anymore as I used to; but if you ask when I change my last diaper. I can probably tell it to you to the minute.<br />&nbsp;<br />But, I have also come to realizing the knowledge is power. Not as much the knowledge that you hold, but the knowledge that you can enpower others to be successful in their journey. I think that is the primary reason why I have decided to give this 'blogging' a second try. Maybe, the information this will save one persons time of going around and losing hair like I have.</p>]]></content:encoded>
    </item>
    <item>
      <title>Converting Hex String To Corresponding Byte Array Using C#</title>
      <link>https://docs.microsoft.com/archive/blogs/heikkiri/converting-hex-string-to-corresponding-byte-array-using-c</link>
      <pubDate>Tue, 17 Jul 2012 15:32:00 GMT</pubDate>
      <dc:creator><![CDATA[Heikki K. Ritvanen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/heikkiri/2012/07/17/converting-hex-string-to-corresponding-byte-array-using-c/</guid>
      <description><![CDATA[I came across an issue where I needed to convert a string representing HEX value into corresponding...]]></description>
      <content:encoded><![CDATA[<p>I came across an issue where I needed to convert a string representing HEX value into corresponding byte array. I know that there are various solutions that all accomplish the same task: Take A String And Convert It To Equivalent Byte Array.</p>
<p>For example a string value: 0x0123456789ABCDEF would be 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD and 0xEF represented in a byte array. The basic .NET functions would give you the byte array of the actualy ASCII characters, and not the binary value that they represent. There was all kind of solutions out there. Some declared to be faster than other, or simply the fastest. I am sure the solution that I came up with is not prettiest or the most effcient. But, it is my solution that I came up with. I am sure that it has been thought before but have not seen any post that are quite a like it.&nbsp;I think that it is pretty good solution for what I wanted to accomplish. That said. I love learning. So, if you find a problem or have an idea to improve it. Please! All feedback is welcomed: The Good, The Bad and The Ugly.</p>
<p><span style="text-decoration: underline;"><strong>The Problem</strong></span></p>
<p>Convert a string it to a byte array representing the actual text values of each byte.</p>
<p><span style="text-decoration: underline;"><strong>Considerations</strong></span></p>
<p>I spent some time thinking about different things that I would have to take into consideration when doing the conversion of the string to the byte array.</p>
<p>Special Cases: Input is valid, and expected but it creates special handling conditions.</p>
<ol>
<li>Is the input string null or empty</li>
<li>The string starts with the HEX indicator string '0x'.</li>
<li>Is the leading '0' dropped from the string.</li>
<li>The casing of the letter, they can be upper, lower or mixed casing.</li>
</ol>
<p>Error Checking: We live in a World where we can't trust any, not even our input string. So, I need to have some type of validation in place for the input.</p>
<ol>
<li>Does the string contain characters that are not valid alphanumeric values: 0-9 and A-F.</li>
</ol>
<p><strong><span style="text-decoration: underline;">Approach</span></strong></p>
<p>Taking into account the factors that I came up with, I came up with the following approach.</p>
<p>To handle the case of null or empty input, I would&nbsp;return an empty array. To avoid, unnecessary allocations I created a static, readonly empty byte array that&nbsp;I would return to the caller.</p>
<pre class="code">private static readonly byte[] Empty = new byte[0];
</pre>
<p>Once I have determined that I actually have some type of string. I would handle rest of conditions during the conversion, except the 'dropped' leading zero ('0') which I would handle before the actual conversion.</p>
<p>For the actual conversion I decided to take a forked solution: reading 2 characters at a time. The upper and lower nibble, which I would the convert individual to the equivalent byte value. This would be the time to validate that the received character is actually an alphanumeric character.</p>
<p><span style="text-decoration: underline;"><strong>My Solution</strong></span></p>
<p>Now to the fun part. Coding. I would break my solution into 2 distinct functions: ConvertToByteArray and FromCharacterToByte.</p>
<p>ConvertToByteArray: This function would be the public function exposed to the caller. It would be responsible for doing basic input validation, handle the items 1, 2 and 3 from the special cases that I had identified as well as constructing the byte array to be returned to the caller.</p>
<pre class="code">        public static byte[] ConvertToByteArray(string value)
        {
            byte[] bytes = null;
            if (String.IsNullOrEmpty(value))
                bytes = Empty;
            else
            {
                int string_length = value.Length;
                int character_index = (value.StartsWith("0x", StringComparison.Ordinal)) ? 2 : 0; // Does the string define leading HEX indicator '0x'. Adjust starting index accordingly.               
                int number_of_characters = string_length - character_index;

                bool add_leading_zero = false;
                if (0 != (number_of_characters % 2))
                {
                    add_leading_zero = true;

                    number_of_characters += 1;  // Leading '0' has been striped from the string presentation.
                }

                bytes = new byte[number_of_characters / 2]; // Initialize our byte array to hold the converted string.

                int write_index = 0;
                if (add_leading_zero)
                {
                    bytes[write_index++] = FromCharacterToByte(value[character_index], character_index);
                    character_index += 1;
                }

                for (int read_index = character_index; read_index &lt; value.Length; read_index += 2)
                {
                    byte upper = FromCharacterToByte(value[read_index], read_index, 4);
                    byte lower = FromCharacterToByte(value[read_index + 1], read_index + 1);

                    bytes[write_index++] = (byte)(upper | lower);
                }
            }

            return bytes;
        }
</pre>
<p>FromCharacterToByte: This function would be the private work horse function. The main responsiblity would be the convert the character in hand to the equivalent byte value. In case of non-numeric value, this function would handle the casing and validation of the character. Now, to reuse this code the function would have to take into account the nibble order and shift the value accordingly.</p>
<pre class="code">        private static byte FromCharacterToByte(char character, int index, int shift = 0)
        {
            byte value = (byte)character;
            if (((0x40 &lt; value) &amp;&amp; (0x47 &gt; value)) || ((0x60 &lt; value) &amp;&amp; (0x67 &gt; value)))
            {
                if (0x40 == (0x40 &amp; value))
                {
                    if (0x20 == (0x20 &amp; value))
                        value = (byte)(((value + 0xA) - 0x61) &lt;&lt; shift);
                    else
                        value = (byte)(((value + 0xA) - 0x41) &lt;&lt; shift);
                }
            }
            else if ((0x29 &lt; value) &amp;&amp; (0x40 &gt; value))
                value = (byte)((value - 0x30) &lt;&lt; shift);
            else
                throw new InvalidOperationException(String.Format("Character '{0}' at index '{1}' is not valid alphanumeric character.", character, index));

            return value;
        }
</pre>
<p>Now, I understand that this function take a simple string as input. For now this will do the trick and/if the time comes for me to read the value from a file. Support for stream is easy to add.</p>
<p><span style="text-decoration: underline;"><strong>Usage</strong></span></p>
<p>The calling this function is very simple. I created a class named 'StringConverter' to hold them.</p>
<pre code="class">byte[] bytes = StringConverter.ConvertToByteArray("0x0123456789AbCdEf");
</pre>
<p><strong><span style="text-decoration: underline;">Performance</span></strong></p>
<p>As always, I am curious how it works with large string. I created a text file and repeated the value '0123456789AbCdEf' over and over and over again. So many times that I ended up with a 18.5MB file. Due to the lack of support for reading a stream, I simply load the file and read the whole string into memory using StreamReader. Then simply&nbsp;pass it to the function.</p>
<p>I was actually suprised with the performance results that I received.</p>
<p>Including the reading the content of the file, the conversion completed in just about 500ms (0.5 seconds). Not bad.</p>
<p>Now, if I moved the read outside the timer code. Read the massive string into a variable variable and passed it into the conversion function. The total time taken dropped to consistently to around 190ms (0.19 seconds).</p>
<p><strong><span style="text-decoration: underline;">Conclussion</span></strong></p>
<p>The results are suprising, and not too bad for about an hours worth of work. Converting a 18.5MB string into equivalent byte array using .NET in less than 200ms.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>So you think that your ServicePoint is out of connections???</title>
      <link>https://docs.microsoft.com/archive/blogs/heikkiri/so-you-think-that-your-servicepoint-is-out-of-connections</link>
      <pubDate>Fri, 11 Nov 2005 11:23:00 GMT</pubDate>
      <dc:creator><![CDATA[Heikki K. Ritvanen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/heikkiri/2005/11/11/so-you-think-that-your-servicepoint-is-out-of-connections/</guid>
      <description><![CDATA[It seems to be an issue that many people keep hitting: running out of connections. I have seen cases...]]></description>
      <content:encoded><![CDATA[<P>It seems to be an issue that many people keep hitting: running out of connections. I have seen cases where the &lt;maxConnections&gt; value is just pumped up randomly the values per <A href="http://support.microsoft.com/id?=821268">KB821268</A>. Wouldn't it be nice to actually be able to tell if that is truly the case?? :) It is actually easier than many think, the tools that you need to do this are all available on the web (<A href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx">Debugging Tools For Windows</A>) and SOS.dll which ships with the .NET framework and is located in the framework folder (%WinDir%\Microsoft.Net\Framework\v1.1.4322).</P>
<P>So, how do I do it then? First you need to have the debugging tools install on your machine. Then you will need to generate a hang dump of the process that you think is running out of connection. You can use the ADPLUS.vbs script which is shipped with debugging tools that you just installed. So, to get hang dump of the process just do the following:</P>
<P>1) Open command prompt and navigate to the folder that you installed the tools to.</P>
<P>2) To generate hang dump run one the following command which ever suites you the best: adplus.vbs -quiet -hang -p &lt;PID of the process&gt; <STRONG><EM>or</EM></STRONG>&nbsp;adplus.vbs -quiet -hang -pn &lt;Process Name&gt;</P>
<P>This will generate a hang mode folder for you which contains the dump file of your process. Now in the same command prompt type windbg.exe - which will launch the UI debugger. In the file menu select to 'Open Crash Dump...' and select the .dmp file which was created in step 2 above.</P>
<P>So now you have the dump open - GREAT, so far so good!</P>
<P>First of all we can fix the symbol path simply running !symfix - you can specify folder after this if you prefer to store the symbols to specific location otherwise they will be stored to the folder of the debugger.</P>
<P>Now when you have the hang dump open, we need to load the SOS.dll which allows us to exam the manage threads and what is going on them. To load sos.dll you need to execute the following command.</P><FONT size=3>
<P><STRONG>.load c:\windows\microsoft.net\framework\v1.1.4322\sos.dll</STRONG></P>
<P>I find the following command to be the easiest way to get a glance of the processes managed threads and what they are doing. You may agree or disagree ... make you pick!</P>
<P><STRONG>~*e !ClrStack</STRONG></P>
<P>This will give you output of all the managed stack in the process. With a quick look I can tell that ie the thread below has a connection and is just waiting a response from the server.</P>
<P><FONT size=1>ESP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EIP&nbsp;&nbsp;&nbsp;&nbsp; <BR>033dfab4&nbsp; 7c90eb94 [FRAME: ECallMethodFrame] [DEFAULT] Boolean System.Threading.WaitHandle.WaitOneNative(I,UI4,Boolean)<BR>033dfac8&nbsp; 799e4811 [DEFAULT] [hasThis] Boolean System.Threading.WaitHandle.WaitOne(I4,Boolean)<BR>033dfafc&nbsp; 7b259381 [DEFAULT] [hasThis] Class <STRONG>System.Net.WebResponse System.Net.HttpWebRequest.GetResponse()</STRONG><BR>033dfb24&nbsp; 02ee6769 [DEFAULT] [hasThis] Class System.Net.WebResponse System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(Class System.Net.WebRequest)<BR>033dfb54&nbsp; 02ee6726 [DEFAULT] [hasThis] Class System.Net.WebResponse System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(Class System.Net.WebRequest)<BR>033dfb58&nbsp; 02ee4ff0 [DEFAULT] [hasThis] SZArray Object System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String,SZArray Object)<BR>033dfba0&nbsp; 02ee4ef9 [DEFAULT] [hasThis] String Demo.HelloWorld(String) at [+0x49] [+0x0]<BR>033dfbc8&nbsp; 02ee0116 [DEFAULT] Void DotNetDelete.Class1.CallWebService(Object) at [+0x4e] [+0x11]<BR></FONT></P>
<P>But the point of this blog is to figure out if I am running out of connections. So, I found another thread from the output which looked like this:</P>
<P><FONT size=1>ESP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EIP&nbsp;&nbsp;&nbsp;&nbsp; <BR>0448f268&nbsp; 7c90eb94 [FRAME: ECallMethodFrame] [DEFAULT] Boolean System.Threading.WaitHandle.WaitOneNative(I,UI4,Boolean)<BR>0448f27c&nbsp; 799e4811 [DEFAULT] [hasThis] Boolean System.Threading.WaitHandle.WaitOne(I4,Boolean)<BR>0448f2b0&nbsp; 7b258b88 [DEFAULT] [hasThis] Class <STRONG>System.IO.Stream System.Net.HttpWebRequest.GetRequestStream()</STRONG><BR>0448f2d8&nbsp; 02f14fa2 [DEFAULT] [hasThis] SZArray Object System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String,SZArray Object)<BR>0448f320&nbsp; 02f14ef9 [DEFAULT] [hasThis] String Demo.HelloWorld(String) at [+0x49] [+0x0]<BR>0448f348&nbsp; 02f10116 [DEFAULT] Void DotNetDelete.Class1.CallWebService(Object)<BR></FONT></P>
<P>If you see many thread in you dump file - then you are most likely running out of connections as this thread is trying to obtain a connection to the target web service.</P>
<P>So, lets take a look at the thread which is blocked ... you can switch to this thread by running command: ~&lt;Thread Number&gt;s</P>
<P>So, this is simple a sync request to a some backend web service. Hence, you should be able to find the corresponding System.Net.HttpWebRequest on the stack. To do this you can run a simple command from the sos.dll called DumpStackObjects. So write !DumpStackObjects on the command window and press enter. This will show you all the objects which are found on the stack, note that some of them can be the same object. Below is a simple sample (removed some lines for clarity)</P>
<P><FONT size=1>0:023&gt; !DumpStackObjects<BR>ESP/REG&nbsp; Object&nbsp;&nbsp; Name<BR>044df134 00b35688 System.String&nbsp;&nbsp;&nbsp; -<BR>044df220 00ca9314 System.Net.LazyAsyncResult<BR>044df224 00b4672c System.String&nbsp;&nbsp;&nbsp; Heikki<BR>044df234 00ca9314 System.Net.LazyAsyncResult<BR>044df25c 00ca941c System.Threading.ManualResetEvent<BR>044df260 00b4672c System.String&nbsp;&nbsp;&nbsp; Heikki<BR>044df27c 00b4672c System.String&nbsp;&nbsp;&nbsp; Heikki<BR>044df280 00ca8b24 System.Net.HttpWebRequest<BR>044df284 00ca9314 System.Net.LazyAsyncResult</FONT></P>
<P>So from the output above I can see that my HttpWebRequest object is located at 0x00ca8b24. To look at this object run command !DumpObj with the address of your request object.</P>
<P>This will show you the whole System.Net.HttpWebRequest object and all of its members and values.</P>
<P><FONT size=1>0:023&gt; !DumpObj 00ca8b24 <BR>Name: System.Net.HttpWebRequest<BR>MethodTable 0x7b349a6c<BR>EEClass 0x7b349d50<BR>Size 204(0xcc) bytes<BR>mdToken: 020001fa&nbsp; (c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll)<BR>FieldDesc*: 7b349db4<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MT&nbsp;&nbsp;&nbsp; Field&nbsp;&nbsp; Offset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attr&nbsp;&nbsp;&nbsp; Value Name<BR>79b95814&nbsp; 40000b6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 __identity<BR>7b348524&nbsp; 4000f0c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp;&nbsp;&nbsp; static 00c2e8f8 s_PrefixList<BR>7b349a6c&nbsp; 4000f30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca9314 _WriteAResult<BR>7b349a6c&nbsp; 4000f31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _ReadAResult<BR>7b349a6c&nbsp; 4000f32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _ContinueDelegate<BR><STRONG>7b349a6c&nbsp; 4000f33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c95558 _ServicePoint</STRONG><BR>7b349a6c&nbsp; 4000f34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca93dc _WriteEvent<BR>7b349a6c&nbsp; 4000f35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _WriteInProgressEvent<BR>7b349a6c&nbsp; 4000f36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _HaveResponse<BR>7b349a6c&nbsp; 4000f37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _OnceFailed<BR>7b349a6c&nbsp; 4000f38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _WriteNotifed<BR>7b349a6c&nbsp; 4000f39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _HttpResponse<BR>7b349a6c&nbsp; 4000f3a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _ResponseException<BR>7b349a6c&nbsp; 4000f3b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _CoreResponse<BR>7b349a6c&nbsp; 4000f3e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c794d4 _Verb<BR>7b349a6c&nbsp; 4000f3f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c794d4 _OriginVerb<BR>7b349a6c&nbsp; 4000f40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca8bfc _HttpRequestHeaders<BR>7b349a6c&nbsp; 4000f41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _WriteBuffer<BR>7b349a6c&nbsp; 4000f42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 94&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 _HttpWriteMode<BR>7b349a6c&nbsp; 4000f43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _AllowAutoRedirect<BR>7b349a6c&nbsp; 4000f44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca8530 _Uri<BR>7b349a6c&nbsp; 4000f45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca8530 _OriginUri<BR>7b349a6c&nbsp; 4000f46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _ChallengedUri<BR>7b349a6c&nbsp; 4000f47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _ChallengedSpn<BR>7b349a6c&nbsp; 4000f48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _MediaType<BR>7b349a6c&nbsp; 4000f49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int64&nbsp;&nbsp; instance -1 _ContentLength<BR>7b349a6c&nbsp; 4000f4a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c573c4 _Version<BR>7b349a6c&nbsp; 4000f4b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _DestinationVersion<BR>7b349a6c&nbsp; 4000f4c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _ProxyUserSet<BR>7b349a6c&nbsp; 4000f4d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c6d994 _Proxy<BR>7b349a6c&nbsp; 4000f4e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _ConnectionGroupName<BR>7b349a6c&nbsp; 4000f4f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _PreAuthenticate<BR>7b349a6c&nbsp; 4000f50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca8ec4 _ProxyAuthenticationState<BR>7b349a6c&nbsp; 4000f51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca8edc _ServerAuthenticationState<BR>7b349a6c&nbsp; 4000f52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _CurrentAuthenticationState<BR>7b349a6c&nbsp; 4000f53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _AuthInfo<BR>7b349a6c&nbsp; 4000f54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ba&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 _RequestSubmitted<BR>7b349a6c&nbsp; 4000f55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c96a3c _AbortDelegate<BR>7b349a6c&nbsp; 4000f56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _Abort<BR>7b349a6c&nbsp; 4000f57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 _ExpectContinue<BR>7b349a6c&nbsp; 4000f58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 _KeepAlive<BR>7b349a6c&nbsp; 4000f59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; be&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 _Pipelined<BR>7b349a6c&nbsp; 4000f5a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _SubmitWriteStream<BR>7b349a6c&nbsp; 4000f5b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _OldSubmitWriteStream<BR>7b349a6c&nbsp; 4000f5c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 _AllowWriteStreamBuffering<BR>7b349a6c&nbsp; 4000f5d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 _WriteStreamRetrieved<BR>7b349a6c&nbsp; 4000f5e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50 _MaximumAllowedRedirections<BR>7b349a6c&nbsp; 4000f5f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _AutoRedirects<BR>7b349a6c&nbsp; 4000f60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _Saw100Continue<BR>7b349a6c&nbsp; 4000f61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _AcceptContinue<BR>7b349a6c&nbsp; 4000f62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _RerequestCount<BR>7b349a6c&nbsp; 4000f63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp; 100000 _Timeout<BR>7b349a6c&nbsp; 4000f64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp; 300000 _ReadWriteTimeout<BR>7b349a6c&nbsp; 4000f65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 84&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00ca8bf0 _ClientCertificates<BR>7b349a6c&nbsp; 4000f66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _CookieContainer<BR>7b349a6c&nbsp; 4000f67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _LockConnection<BR>7b349a6c&nbsp; 4000f69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ac&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64 _MaximumResponseHeadersLength<BR>7b349a6c&nbsp; 4000f6b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 _UnlockDelegate<BR>7b349a6c&nbsp; 4000f6c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 m_DelegationFix<BR>7b349a6c&nbsp; 4000f6d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _UnsafeAuthenticatedConnectionSharing<BR>7b349a6c&nbsp; 4000f6e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 _WriteInProgress<BR>7b349a6c&nbsp; 4000f6f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_HashCode<BR>7b349a6c&nbsp; 4000f70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_ComputedHashCode<BR>7b349a6c&nbsp; 4000f3c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2a4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp;&nbsp;&nbsp; static 00c3a640 HttpBytes<BR>7b349a6c&nbsp; 4000f3d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2a8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp;&nbsp;&nbsp; static 00c3a654 m_EndWriteHeaders_Part2Callback<BR>7b349a6c&nbsp; 4000f68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2b0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp;&nbsp;&nbsp; static 00000040 _DefaultMaximumResponseHeadersLength<BR>7b349a6c&nbsp; 4000f6a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2ac&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp;&nbsp;&nbsp; static 00c4ba24 s_NetConfig<BR></FONT><FONT size=1></P></FONT>
<P>It is does not require&nbsp;rocket science to figure that your ServicePoint is stored in the _ServicePoint member. So, run the same !DumpObj for that object and you get information about the ServicePoint.</P>
<P><FONT size=1>0:023&gt; !DumpObj 00c95558 <BR>Name: System.Net.ServicePoint<BR>MethodTable 0x7b352ca4<BR>EEClass 0x7b352db4<BR>Size 92(0x5c) bytes<BR>mdToken: 02000247&nbsp; (c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089\system.dll)<BR>FieldDesc*: 7b352e18<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MT&nbsp;&nbsp;&nbsp; Field&nbsp;&nbsp; Offset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attr&nbsp;&nbsp;&nbsp; Value Name<BR><STRONG>7b352ca4&nbsp; 400112d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_ProxyServicePoint</STRONG><BR>7b352ca4&nbsp; 400112e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_UserChangedLimit<BR><STRONG>7b352ca4&nbsp; 400112f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 m_ConnectionLimit</STRONG><BR>7b352ca4&nbsp; 4001130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 m_ConnectionMode<BR>7b352ca4&nbsp; 4001131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_SupportsPipelining<BR>7b352ca4&nbsp; 4001132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c955b4 m_ConnectionGroupList<BR>7b352ca4&nbsp; 4001133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c1d97c m_Address<BR>7b352ca4&nbsp; 4001134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp; 900000 m_MaxIdleTime<BR>7b352ca4&nbsp; 4001135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUETYPE&nbsp;&nbsp; instance start at 00c955a8 m_ExpiresAt<BR>7b352ca4&nbsp; 4001136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c1d9e4 m_ConnectionName<BR>7b352ca4&nbsp; 4001137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00cac0e0 m_IPHostEntryInfos<BR>7b352ca4&nbsp; 4001138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_CurrentAddressInfoIndex<BR>7b352ca4&nbsp; 4001139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 m_ConnectionsSinceDns<BR><STRONG>7b352ca4&nbsp; 400113a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 m_CurrentConnections<BR></STRONG>7b352ca4&nbsp; 400113b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 m_ServerCertificate<BR>7b352ca4&nbsp; 400113c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 m_ClientCertificate<BR>7b352ca4&nbsp; 400113d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 m_UseNagleAlgorithm<BR>7b352ca4&nbsp; 400113e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 m_Expect100Continue<BR>7b352ca4&nbsp; 400113f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c7a1b8 m_LookupString<BR>7b352ca4&nbsp; 4001140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00cac0ac m_CachedRemoteIPAddressInfo<BR>7b352ca4&nbsp; 4001141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00000000 m_Version<BR>7b352ca4&nbsp; 4001142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 m_Understands100Continue<BR>7b352ca4&nbsp; 4001143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS&nbsp;&nbsp; instance 00c956c0 DnsLock<BR>7b352ca4&nbsp; 4001144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Int32&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_HashCode<BR>7b352ca4&nbsp; 4001145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Boolean&nbsp;&nbsp; instance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 m_ComputedHashCode</FONT></P>
<P>Couple things about this that I would like point out. The value which you have defined for &lt;maxConnections&gt; can be found from the m_ConnectionLimit value. In the sample above it is 2, so there can be only 2 threads connected to the defined host for this ServicePoint. Well, this can be a problem as there are 2 connection (m_CurrentConnections) though this does not mean that 2 are active, but you should not be able to find from all the stacks 2 threads which are executing request and others are waiting for the connection.</P>
<P>Why is this important? Well you MAY think that you are going to your target at <A href="http://myserver/Service.asmx">http://myserver/Service.asmx</A>, but that may NOT be the case as the connection is defined by the service point. If you have a proxy defined on the client your request can be assigned a proxy service point (Boolean value m_ProxyServicePoint 1 = true / 0 = false). So, if you define your &lt;maxConnections&gt; to specifically for your endpoint and you get assigned a proxy service point you can still see bottleneck getting connection!!!! Therefore, no matter how high your maxConnection value for your endpoint is, but if your proxy has 2 and your request gets routed through the proxy - you will bottleneck!</P>
<P>I hope this will help you to troubleshoot your web service performance issues with connections!!!</P>
<P>Happy Debugging !!!</P>
<P></FONT>&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Custom App.Config file for ServicedComponent</title>
      <link>https://docs.microsoft.com/archive/blogs/heikkiri/custom-app-config-file-for-servicedcomponent</link>
      <pubDate>Thu, 10 Nov 2005 17:33:00 GMT</pubDate>
      <dc:creator><![CDATA[Heikki K. Ritvanen]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/heikkiri/2005/11/10/custom-app-config-file-for-servicedcomponent/</guid>
      <description><![CDATA[I have come across this question few times this week so I though to start this whole 'blogging'...]]></description>
      <content:encoded><![CDATA[<P>I have come across this question few times this week so I though to start this whole 'blogging' with. Developers want to take advantage of the app.config file for the COM+ applications, but they are not available for dll? What now? Well as the hosting process is dllhost.exe, one could create app.config file for dllhost and put it in the %windir%\System32. Not really good solution is it? What is now you install something on the machine and someone thought about the same thing and they copy there app.config file there. Your application breaks...</P>
<P>Windows XP and 2003 provides a nice solution for this using the 'Application Base Directory' property of the COM+ Application.</P>
<P>So how to use it now? First step is to create an application.manifest file and copy it to the folder that you want to use as the base for your application. The content of the file is very simple, just copy the text from below to a notepad and save it as 'application.manifest'.</P>
<P>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;<BR>&lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"/&gt;<BR></P>
<P>Now, create your app.config file for example something like below.</P>
<P>&lt;?xml version="1.0" encoding="utf-8" ?&gt;<BR>&lt;configuration&gt;<BR>&nbsp;&lt;appSettings&gt;<BR>&nbsp;&nbsp;&lt;add key="ConfigData" value="My Custom AppSetting!" /&gt;<BR>&nbsp;&lt;/appSettings&gt;<BR>&lt;/configuration&gt;<BR></P>
<P>Save this file to the same folder as the manifest file, NOTE the name of this file needs to be application.config!!!!</P>
<P>Now you are ready to configure your COM+ application. So, open you Component Services MMC and find your application.</P>
<P>After you have located your COM+ application, right click the application and go to 'Properties' and 'Activation' Tab.</P>
<P>At the bottom of this tab, you should be able to find an option for 'Application Root Directory'. Browse or copy paste the path that you saved the 2 files created earlier, click Apply, click OK and you are done!</P>
<P>Note: If you application is running you need to stop it for the change to take place and the AppDomain of the components BaseDirectory will return you this value!</P>
<P>Now, in your serviced component you can access the application specific configuration file by simply using System.Configuration.ConfigurationSettings.AppSettings["ConfigData"].</P>]]></content:encoded>
    </item>
  </channel>
</rss>