Windows phone 7 为什么我在尝试使用HttpWebRequest时遇到ProtocolViolationException?

Windows phone 7 为什么我在尝试使用HttpWebRequest时遇到ProtocolViolationException?,windows-phone-7,httpwebrequest,Windows Phone 7,Httpwebrequest,我不知道。我正在尝试从我为Windows Phone构建的应用程序上的REST服务获取XML。我总是在下面一行得到一个异常: HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse; 我有以下设置(忽略错误的url,这只是一个示例…) HttpWebRequest request=WebRequest.Create(“https://domain.chargify.com/customers.xml)作为

我不知道。我正在尝试从我为Windows Phone构建的应用程序上的REST服务获取XML。我总是在下面一行得到一个异常:

HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;
我有以下设置(忽略错误的url,这只是一个示例…)

HttpWebRequest request=WebRequest.Create(“https://domain.chargify.com/customers.xml)作为HttpWebRequest;
NetworkCredential credentials=新的NetworkCredential(“appkeyhere”、“password”);
请求.凭据=凭据;
request.Method=“GET”;
request.ContentType=“text/xml”;
BeginGetResponse(新的AsyncCallback(SomeCallback),request);
...
私有空回调(IAsyncResult ar){
HttpWebRequest request=ar.AsyncState作为HttpWebRequest;
HttpWebResponse=request.EndGetResponse(ar)作为HttpWebResponse;
StreamReader=新的StreamReader(response.GetResponseStream());
XElement xmlResult=XElement.Parse(reader.ReadToEnd());
...
}
例外情况如下:

System.Net.ProtocolViolationException was unhandled
Message=ProtocolViolationException
  StackTrace:
       at System.Net.Browser.ClientHttpWebRequest.PrepareAndSendRequest(String method, Uri requestUri, Stream requestBodyStream, WebHeaderCollection headerCollection, CookieContainer cookieContainer)
       at System.Net.Browser.ClientHttpWebRequest.BeginGetResponseImplementation()
       at System.Net.Browser.ClientHttpWebRequest.InternalBeginGetResponse(AsyncCallback callback, Object state)
       at System.Net.Browser.AsyncHelper.BeginOnUI(BeginMethod beginMethod, AsyncCallback callback, Object state)
       at System.Net.Browser.ClientHttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state)
       at ChargifyWPA.MainPage.button1_Click(Object sender, RoutedEventArgs e)
       at System.Windows.Controls.Primitives.ButtonBase.OnClick()
       at System.Windows.Controls.Button.OnClick()
       at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
       at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
       at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)
有人有什么想法吗?它是https,而不是http。。这是问题的根源吗?
谢谢。

现在桌面上出现此错误的最常见原因显然是web服务器需要SSL而不是TLS身份验证。请参阅上的所有评论。您在CodePlex上的麻省理工学院许可的Chargify.NET项目似乎已经是(“SecurityProtocolType.Ssl3”)

其他可供尝试的选项包括退回到HTTP/1.0或禁用保持活动


请务必尝试删除ContentType初始化。

这不是您的问题,但它可能会帮助其他人。我遇到这个问题是因为我在GET请求中调用BeginGetRequestStream()。当然,这不是必需的,我应该调用BeginGetResponse()。愚蠢的错误,但如果错误消息更有用,我会更快地发现它。

我打赌这个问题是因为您正在设置“ContentType”标题,但没有在请求中提供内容。注意,在尝试创建请求时引发协议异常

您可能想将“Accept”头设置为“text/xml”,而不是内容类型头。

如果请求中存在“GET”,则带有“GET”的“content-type”头会导致异常
在Azure Table REST API中,需要将ContentType编码到auth标头中-使用空字符串作为GET标头的“ContentType”

请发布完整的异常,并向我们显示异常发生的位置。此外,在SomeCallback中,您需要将IDisposable实例放在using块中。HttpWebResponse、StreamReader甚至流都需要使用块进入
,否则您将泄漏资源。在我的问题中添加了例外。。我已经修改为使用“using”块,这很好。问题仍然存在。不确定这是否是请求它的正确位置,但您能否将Windows-Phone-7标记添加到此帖子?这就是问题所在。谢谢你,保罗。