<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Bugs</title>
        <link>http://ayende.com/Blog/category/499.aspx</link>
        <description>Bugs</description>
        <language>en-US</language>
        <copyright>Ayende Rahien</copyright>
        <managingEditor>Ayende@ayende.com</managingEditor>
        <generator>Subtext Version 1.9.3.51</generator>
        <item>
            <title>How do you track that?</title>
            <link>http://ayende.com/Blog/archive/2008/05/05/How-do-you-track-that.aspx</link>
            <description>&lt;p&gt;I have an interesting problem with SvnBridge.&lt;/p&gt;
&lt;p&gt;After around 5000 full revision request (a set of requests that can occur), the application get hung making a web service call to TFS. This comes after making quite a few calls to TFS, and is generally fairly easily reproducible. The actual call being made is not an expensive one (nor is it the same call). TFS is responsive during that time, so it is not its fault.&lt;/p&gt;
&lt;p&gt;It looks very much like I am hitting the 2 concurrent HTTP requests, except that all requests are serialized, and there is no multi threaded work involved.&lt;/p&gt;
&lt;p&gt;I have been unable to reproduce this under a profiler or debugger...&lt;/p&gt;
&lt;p&gt;Thoughts?&lt;/p&gt;
&lt;img src="http://ayende.com/Blog/aggbug/10209.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/05/05/How-do-you-track-that.aspx</guid>
            <pubDate>Mon, 05 May 2008 08:09:12 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/10209.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2008/05/05/How-do-you-track-that.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10209.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Source control is not a feature you can postpone to vNext</title>
            <link>http://ayende.com/Blog/archive/2008/04/17/Source-control-is-not-a-feature-you-can-postphone-to.aspx</link>
            <description>&lt;p&gt;I was taking part in a session in the MVP Summit today, and I came out of it absolutely &lt;strong&gt;shocked&lt;/strong&gt; and &lt;strong&gt;bitterly disappointed&lt;/strong&gt; with the product that was under discussion. I am not sure if I can talk about that or not, so we will skip the name and the purpose. I have several issues with the product itself and its vision, but that is beside the point that I am trying to make now.&lt;/p&gt;
&lt;p&gt;What &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; bothered me is utter ignorance of a critical requirement from Microsoft, who is supposed to know what they are doing with software development. That requirement is source control.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Source control is not a feature&lt;/li&gt;

  &lt;li&gt;Source control is a &lt;strong&gt;mandatory requirement&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The main issue is that the product uses XML files as its serialization format. Those files are not meant for human consumption, but should be used only through a tool. The major problem here is that no one took source control into consideration when designing those XML files, so they are &lt;strong&gt;unmergable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Let me give you a simple scenario:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Developer A makes a change using the tool, let us say that he is modifying an attribute on an object.&lt;/li&gt;

  &lt;li&gt;Developer B makes a change using the tool, let us say tat he is modifying a different attribute on a different object.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result?&lt;/p&gt;
&lt;p&gt;Whoever tries to commit last will get an error, the file was already updated by another guy. Usually in such situations you simply merge the two versions together, and don't worry about this.&lt;/p&gt;
&lt;p&gt;The problem is that this XML file is implemented in such a way that each time you save it, a whole bunch of stuff gets moved around, all sort of unrelated things change, etc. In short, even a very minor change cause a significant change in the underlying XML.&lt;/p&gt;
&lt;p&gt;You can see this in products that are shipping today, like SSIS, WF, DSL Toolkit, etc.&lt;/p&gt;
&lt;p&gt;The problem is that when you try to merge, you have too many unrelated changes, which completely defeat the purpose of merging.&lt;/p&gt;
&lt;p&gt;This, in turn, means that you lose the ability to work in a team environment. This product is supposed to be aimed at big companies. But it can't suppose a team of more than one! To make things worse, when I brought up this issue, the answer was something along the line: "Yes, we know about this issue, but you can avoid this using exclusive checkouts."&lt;/p&gt;
&lt;p&gt;At that point, I am not really sure what to say. Merges happen not just when two developers modify the same file, merges also happen when you have branches. As a simple scenario, I have a development branch and a production branch. Fixing a bug in the production branch requires touching this XML file. But if I made &lt;span style="font-style: italic;"&gt;any&lt;/span&gt; change to it on the development branch, you can't merge that. What happen if I use a feature branch? Or version branches?&lt;/p&gt;
&lt;p&gt;Not considering the implications of something as basic as source control is amateurish in the extreme. Repeating the &lt;span style="font-style: italic;"&gt;same&lt;/span&gt; mistake, over and over again, across multiple products, despite customer feedback on how awful this is and how much it hurt the developers who are going to use it shows contempt to the end developers, and a sign of even more serious issue: the team isn't dogfooding the product. Not in any real capacity. Otherwise, they would have already noticed the issue, much sooner in the lifetime of the product, with enough time to actually fix that.&lt;/p&gt;
&lt;p&gt;As it was, I was told that there is nothing to do for the v1 release, that puts the fix (at best) in two years or so. For something that is a complete deal breaker for any serious development.&lt;/p&gt;
&lt;p&gt;I have run into issues where merge issues with SSIS caused us to have to drop &lt;span style="font-style: italic;"&gt;days&lt;/span&gt; of work and having to recreating everything from scratch, costing us something in the order of &lt;strong&gt;two weeks&lt;/strong&gt;. I know of people that had the same issue with WF, and from my experiments, the DSL toolkit has had the exact same issue. The SSIS issues were initially reported on &lt;strong&gt;2005&lt;/strong&gt;, but are not going to be fixed for the 2008 (or so I heard from public sources) , which puts the nearest fix for something as basic as getting &lt;span style="font-style: italic;"&gt;source control right&lt;/span&gt; in a 2-3 years time.&lt;/p&gt;
&lt;p&gt;The same for the product that I am talking about here. I am not really getting that, does Microsoft things that source control isn't an important issue? They keep repeating this critically serious mistake!&lt;/p&gt;
&lt;p&gt;For me, this is unprofessional behavior of the first degree.&lt;/p&gt;
&lt;p&gt;Deal breaker, buh-bye.&lt;/p&gt;
&lt;img src="http://ayende.com/Blog/aggbug/10181.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/04/17/Source-control-is-not-a-feature-you-can-postphone-to.aspx</guid>
            <pubDate>Thu, 17 Apr 2008 08:57:10 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/10181.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2008/04/17/Source-control-is-not-a-feature-you-can-postphone-to.aspx#feedback</comments>
            <slash:comments>48</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10181.aspx</wfw:commentRss>
        </item>
        <item>
            <title>The illustrated guide to confused concurrency</title>
            <link>http://ayende.com/Blog/archive/2008/04/10/The-illustrated-guide-to-confused-concurrency.aspx</link>
            <description>&lt;p&gt;This has me very confused.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theillustratedguidetoconfusedconcurrency_1F93/image_2.png"&gt;&lt;img height="663" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theillustratedguidetoconfusedconcurrency_1F93/image_thumb.png" width="921" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The answer, however, turned out to be that I am an idiot:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theillustratedguidetoconfusedconcurrency_1F93/image_4.png"&gt;&lt;img height="148" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/Theillustratedguidetoconfusedconcurrency_1F93/image_thumb_1.png" width="640" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10169.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/04/10/The-illustrated-guide-to-confused-concurrency.aspx</guid>
            <pubDate>Wed, 09 Apr 2008 23:15:42 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/10169.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2008/04/10/The-illustrated-guide-to-confused-concurrency.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10169.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Brute force concurrency testing</title>
            <link>http://ayende.com/Blog/archive/2008/04/09/Brute-force-concurrency-testing.aspx</link>
            <description>&lt;p&gt;Testing concurrency is hard, just ask anyone who had tried. And tracking down concurrent bugs is even harder.&lt;/p&gt;  &lt;p&gt;I just run into concurrency issue with SvnBridge, and I decided that I have better have a smoke test around to prove that there are no obvious concurrency issues with the code.&lt;/p&gt;  &lt;p&gt;Since I already have over a hundred integration tests, I thought that this would make a great concurrency test. We know that all the tests are passing. Now let us see if they are all passing together. This is quick &amp;amp; dirty, but it expose at least two bugs so far, one of them the original one that we have seen:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ConcurrentActionsTest
{
	[Fact]
	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; RunAllTestsConcurrentyly()
	{
		List&amp;lt;TestData&amp;gt; tests = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;TestData&amp;gt;();
		Type[] types = Assembly.GetExecutingAssembly().GetTypes();
		&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (Type type &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; types)
		{
			&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (type.IsAbstract)
				&lt;span style="color: #0000ff"&gt;continue&lt;/span&gt;;
			&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (type == &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(ConcurrentActionsTest))
				&lt;span style="color: #0000ff"&gt;continue&lt;/span&gt;;
			&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (MethodInfo info &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; type.GetMethods())
			{
				&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] attributes = info.GetCustomAttributes(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(SvnBridgeFactAttribute), &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;);
				&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (attributes.Length == 0)
					&lt;span style="color: #0000ff"&gt;continue&lt;/span&gt;;
				tests.Add(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; TestData((SvnBridgeFactAttribute)attributes[0], info));
			}
		}

		List&amp;lt;IAsyncResult&amp;gt; results = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;IAsyncResult&amp;gt;();
		List&amp;lt;Exception&amp;gt; errors = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;Exception&amp;gt;();
		ExecuteTestDelegate exec = ExecuteTest;
		&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (TestData test &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; tests)
		{
			&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (ITestCommand command &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; test.Fact.CreateTestCommands(test.Method))
			{
				IAsyncResult invoke = exec.BeginInvoke(test, command, errors, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);
				results.Add(invoke);
			}
		}
		&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (IAsyncResult result &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; results)
		{
			result.AsyncWaitHandle.WaitOne();
			exec.EndInvoke(result);
		}
		&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (errors.Count &amp;gt; 0)
		{
			StringBuilder sb = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();
			&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (Exception error &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; errors)
			{
				sb.AppendLine(error.ToString());
			}
			&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Exception(sb.ToString());
		}
	}

	&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ExecuteTestDelegate(TestData test, ITestCommand command, List&amp;lt;Exception&amp;gt; errors);

	&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ExecuteTest(TestData test, ITestCommand command, List&amp;lt;Exception&amp;gt; errors)
	{
		&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;
		{
			&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; instance = Activator.CreateInstance(test.Method.DeclaringType);
			command.Execute(instance);
		}
		&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (TargetInvocationException e)
		{
			&lt;span style="color: #0000ff"&gt;lock&lt;/span&gt; (errors)
				errors.Add(e.InnerException);
		}
		&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception e)
		{
			&lt;span style="color: #0000ff"&gt;lock&lt;/span&gt; (errors)
				errors.Add(e);
		}
	}

	&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; TestData
	{
		&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; MethodInfo Method;
		&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; SvnBridgeFactAttribute Fact;

		&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; TestData(SvnBridgeFactAttribute fact, MethodInfo method)
		{
			Fact = fact;
			Method = method;
		}
	}
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;As I was writing this post, I figure out one issue, the other would require concurrent debugging...&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10168.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/04/09/Brute-force-concurrency-testing.aspx</guid>
            <pubDate>Wed, 09 Apr 2008 14:07:37 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/10168.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2008/04/09/Brute-force-concurrency-testing.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10168.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SQL CE Issues, Part 2</title>
            <link>http://ayende.com/Blog/archive/2008/04/08/SQL-CE-Issues-Part-2.aspx</link>
            <description>&lt;p&gt;Hopefully I'll get the same quick "you are an idiot, this is how it is done" that I got the first time I posted about it. Here is my current issue. Attempting to open SQL CE from multiple threads has locked it out. This has been the state of the system for ~6 hours.&lt;/p&gt;  &lt;p&gt;I don't &lt;em&gt;mind&lt;/em&gt; the locks, I do mind the fact that there seems to be no way to specify a timeout for that, so the app just sit there, waiting, waiting, waiting.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/SQLCEIssuesPart2_FDCB/image_2.png"&gt;&lt;img height="412" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/SQLCEIssuesPart2_FDCB/image_thumb.png" width="937" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10165.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/04/08/SQL-CE-Issues-Part-2.aspx</guid>
            <pubDate>Tue, 08 Apr 2008 15:03:22 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/10165.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2008/04/08/SQL-CE-Issues-Part-2.aspx#feedback</comments>
            <slash:comments>21</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10165.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Internals are Evil</title>
            <link>http://ayende.com/Blog/archive/2008/04/03/Internals-are-Evil.aspx</link>
            <description>&lt;p&gt;A while ago I talked about &lt;a href="http://www.ayende.com/Blog/archive/2008/03/12/Internal-Stripping.aspx"&gt;Internal Stripping&lt;/a&gt;, not surprisingly, I run into another "WTF is this internal?" class just now. And I think it would be a good sample to see what can cause me to pull the pliers and start messing with things.&lt;/p&gt;  &lt;p&gt;The scenario was simple, I was talking with &lt;a href="http://blog.wekeroad.com/"&gt;Rob Conery&lt;/a&gt; about a webcast he is doing, and we started talking about TDD and repositories in a Linq enabled world.&lt;/p&gt;  &lt;p&gt;What we ended up with was the requirement to turn an List&amp;lt;T&amp;gt; to IQueryable&amp;lt;T&amp;gt;, and there isn't easy way to do that. The framework &lt;em&gt;does&lt;/em&gt; have an implementation of this, but, naturally, it is marked internal. Not content to have to deal with writing a non trivial Linq to List&amp;lt;T&amp;gt; provider, I wrote the following:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; IQueryable&amp;lt;T&amp;gt; CreateQueryable&amp;lt;T&amp;gt;(IEnumerable&amp;lt;T&amp;gt; inner)
{
   Type queryable = &lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (IQueryable).Assembly.GetType("&lt;span style="color: #8b0000"&gt;System.Linq.EnumerableQuery`1&lt;/span&gt;").MakeGenericType(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (T));
   ConstructorInfo constructor = queryable.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, &lt;br /&gt;                    &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Type[] {&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt; (IEnumerable&amp;lt;T&amp;gt;)},&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ParameterModifier[0]);
   &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; instance = FormatterServices.GetSafeUninitializedObject(queryable);
   constructor.Invoke(instance, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;[] { inner });
   &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; (IQueryable&amp;lt;T&amp;gt;)instance;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not it works.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10159.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/04/03/Internals-are-Evil.aspx</guid>
            <pubDate>Thu, 03 Apr 2008 01:45:15 GMT</pubDate>
            <wfw:comment>http://ayende.com/Blog/comments/10159.aspx</wfw:comment>
            <comments>http://ayende.com/Blog/archive/2008/04/03/Internals-are-Evil.aspx#feedback</comments>
            <slash:comments>17</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10159.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Why I hate internals, yet again</title>
            <link>http://ayende.com/Blog/archive/2008/03/09/Why-I-hate-internals-yet-again.aspx</link>
            <description>&lt;br /&gt;
So here I am searching for an implementation of a WeakHashtable, and imagine my surprise when I find out that &lt;span style="font-style: italic;"&gt;the BCL already has one such implementation&lt;/span&gt;. Imagine my &lt;span style="font-weight: bold;"&gt;lack&lt;/span&gt; of surprise to find that System.ComponentModel.WeakHashtable is internal, thus rendering it near useless to me.So annoying, frustrating and irritating.          &lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Update:&lt;/span&gt;&lt;br /&gt;
Oh, and as if it is not enough, it appears that there are &lt;span style="font-weight: bold;"&gt;two&lt;/span&gt; implementation of WeakHashtable in the BCL. In two different assemblies (System and System.Windows.Forms).&lt;br /&gt;
From browsing the code, it looks like they just copy/paste the code, instead, you know, recognizing that this is an actual need and &lt;span style="font-style: italic;"&gt;exposing this&lt;/span&gt;.&lt;img src="http://ayende.com/Blog/aggbug/10092.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/03/09/Why-I-hate-internals-yet-again.aspx</guid>
            <pubDate>Sun, 09 Mar 2008 01:26:16 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2008/03/09/Why-I-hate-internals-yet-again.aspx#feedback</comments>
            <slash:comments>13</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10092.aspx</wfw:commentRss>
        </item>
        <item>
            <title>TFS, SOAP and XMLish</title>
            <link>http://ayende.com/Blog/archive/2008/03/06/TFS-SOAP-and-XMLish.aspx</link>
            <description>&lt;p&gt;Today I discovered some really interesting issue with TFS. I was sending it the following message, and no, you are not seeing double, it &lt;em&gt;was&lt;/em&gt; doubled. That was the XML payload that I was sending to a web service.&lt;/p&gt;  &lt;p&gt;Now, the &lt;em&gt;crazy&lt;/em&gt; thing about this, &lt;em&gt;it worked&lt;/em&gt;. And that really scares me.&lt;/p&gt;  &lt;p&gt;You could &lt;a href="http://blog.roblevine.co.uk/?p=11"&gt;argue&lt;/a&gt; that SVN's behavior is correct, but there is not way that this can be considered a valid XML document. &lt;/p&gt;  &lt;div&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Envelope&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #ff0000"&gt;xmlns:soap&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/2003/05/soap-envelope"&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #ff0000"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #ff0000"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;RequestHeader&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/TeamFoundation/2005/06/WorkItemTracking/ClientServices/03"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;uuid&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;RequestHeader&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;GetWorkItem&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/TeamFoundation/2005/06/WorkItemTracking/ClientServices/03"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;workItemId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;2192&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;workItemId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;revisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;revisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;minimumRevisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;minimumRevisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asOfDate&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xsi:nil&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;useMaster&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;useMaster&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;GetWorkItem&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Envelope&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="1.0"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="utf-8"&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Envelope&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #ff0000"&gt;xmlns:soap&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/2003/05/soap-envelope"&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #ff0000"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #ff0000"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;RequestHeader&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/TeamFoundation/2005/06/WorkItemTracking/ClientServices/03"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;uuid&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;RequestHeader&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Header&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;GetWorkItem&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://schemas.microsoft.com/TeamFoundation/2005/06/WorkItemTracking/ClientServices/03"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;workItemId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;2192&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;workItemId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;revisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;revisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;minimumRevisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;minimumRevisionId&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asOfDate&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xsi:nil&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;useMaster&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;useMaster&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;GetWorkItem&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;soap:Envelope&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;img src="http://ayende.com/Blog/aggbug/10085.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/03/06/TFS-SOAP-and-XMLish.aspx</guid>
            <pubDate>Thu, 06 Mar 2008 03:53:17 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2008/03/06/TFS-SOAP-and-XMLish.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10085.aspx</wfw:commentRss>
        </item>
        <item>
            <title>TCP Errors: Tracking it down</title>
            <link>http://ayende.com/Blog/archive/2008/03/06/TCP-Errors-Tracking-it-down.aspx</link>
            <description>&lt;br /&gt;
I get to the office this morning, determined to figure out what the hell was going on with my TCP stack. And I can reproduce the error in about 1/3 of the cases.&lt;br /&gt;
I know that this is my problem, so I decide to move to a known good version and try to figure out where the error happens. I am doing that, and eventually I get to the head of the repository, without being able to reproduce the error.&lt;br /&gt;
After calling for a check of the tooth fairy and requesting immediate assistance from an experienced exorcist, I was unable to reproduce the error, which I found to be &lt;span style="font-style: italic;"&gt;really &lt;/span&gt;annoying.&lt;br /&gt;
I spent some time trying to reproduce that, but couldn't, so I moved to other things.&lt;br /&gt;
After an hour, I needed to figure what was going on at the network layer, so I opened Fiddler. A minute afterward I got the same error.&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Now &lt;/span&gt;I had someone to blame, hurray!&lt;br /&gt;
Indeed, it looks like Fiddler isn't quite up to speed for handling large amount of connections in short amount of time. I am not quite sure what is going on there. The scary thing is that I tested that on 4 different machines, and in all cases, I opened Fiddler first to ensure that I knew what was going on.&lt;img src="http://ayende.com/Blog/aggbug/10084.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/03/06/TCP-Errors-Tracking-it-down.aspx</guid>
            <pubDate>Thu, 06 Mar 2008 02:41:38 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2008/03/06/TCP-Errors-Tracking-it-down.aspx#feedback</comments>
            <slash:comments>5</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10084.aspx</wfw:commentRss>
        </item>
        <item>
            <title>How I broke the TCP Stack</title>
            <link>http://ayende.com/Blog/archive/2008/03/05/How-I-broke-the-TCP-Stack.aspx</link>
            <description>&lt;p&gt;Today I spend a large part of the day tracking down various strange errors. Those errors would be of the following variety:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The connection could not be made because the target machine actively refused it.&lt;/li&gt;    &lt;li&gt;A connect request was made on an already connected socket. &lt;/li&gt;    &lt;li&gt;The underlying connection was closed: A connection that was expected to be kept alive was closed by a server.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now, I am not doing anything strange with TCP/IP, I am just making plain old web service calls (and no, not using my hand rolled SOAP stack). &lt;/p&gt;  &lt;p&gt;I can't really figure out what is going on, but I know that the problem is no in the TCP/IP level, it is something in my code, that is breaking things. It doesn't happen always, but it happens often enough.&lt;/p&gt;  &lt;p&gt;I have ensured to my satisfaction that the server it up, no firewall in the way, respond to calls, etc. &lt;/p&gt;  &lt;p&gt;Flat out weird, and I am not looking forward to trying to figure it out tomorrow.&lt;/p&gt;  &lt;p&gt;Any ideas?&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10082.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/03/05/How-I-broke-the-TCP-Stack.aspx</guid>
            <pubDate>Wed, 05 Mar 2008 07:45:09 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2008/03/05/How-I-broke-the-TCP-Stack.aspx#feedback</comments>
            <slash:comments>26</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10082.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>