EndGetRequestStream上的NotSupportedException

时间:2014-04-04 02:46:56

标签: c# windows-phone-8

public async static Task<WebResponse> GetResponseAsync(this HttpWebRequest request, Dictionary<string, object> post)
{
    var tcs = new TaskCompletionSource<WebResponse>();

    try
    {
        request.BeginGetRequestStream((arReq) =>
        {
            var stream = request.EndGetRequestStream(arReq);//throw NotSupportedException

            writeMultipartObject(stream, post);
            stream.Close();

            request.BeginGetResponse((ar) =>
            {
                var response = request.EndGetResponse(ar);
                tcs.SetResult(response);
            }, null);

        }, null);
    }
    catch (Exception we)
    {
        tcs.SetException(we);
    }

    return await tcs.Task;
}

当我发布某些内容时,它无效。=。= var stream = request.EndGetRequestStream(arReq); //抛出NotSupportedException 告诉我为什么?在ToT .................

System.NotSupportedException ---&gt; System.NotSupportedException:不支持指定的方法。    在System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)    在System.Net.Browser.ClientHttpWebRequest。&lt;&gt; c_ DisplayClasse.b _d(Object sendState)    在System.Net.Browser.AsyncHelper。&lt;&gt; c_ DisplayClass1.b _0(Object sendState)

1 个答案:

答案 0 :(得分:3)

我遇到了类似的行为(仅限Windows Phone)并通过显式处理您正在编写的流来实现它。 所以尝试添加

stream.Flush(); 

之前,和     stream.Dispose();

之后

stream.Close();

声明并查看是否有帮助。

显然,.Net中网络堆栈的行为因代码所运行的平台而异,因为.Net框架是针对每个平台“重新开发”的。

我希望这会有所帮助。

干杯, 克里斯托弗。