System.Net.HttpWebRequest adds the header ‘HTTP header “Expect: 100-Continue”‘ to every request unless you explicitly ask it not to by setting this static property to false:
System.Net.ServicePointManager.Expect100Continue = false;
Some servers choke on that header and send back the 417 error you’re seeing.
Give that a shot.