在上下文中找不到某些单词,缺少参考,大脑即将爆炸?

时间:2011-03-05 07:38:25

标签: c# silverlight windows-phone-7

我正在尝试学习C#/ Silverlight / Windows Phone 7.这里发生了什么:当我尝试直接使用MS的MSDN网站上的示例时,我会遇到各种错误:

例如:

using System;
using System.IO;
using System.Collections.Generic;
using System.Device.Location;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Tasks;
using System.Device.Location;
using Microsoft.Phone.Reactive;

  private void registerPhone(object sender, RoutedEventArgs e)
    {

        // Create a request using a URL that can receive a post. 
        WebRequest request = WebRequest.Create("http://www.contoso.com/PostAccepter.aspx ");
        // Set the Method property of the request to POST.
        request.Method = "POST";
        // Create POST data and convert it to a byte array.
        string postData = "This is a test that posts this string to a Web server.";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";
        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length;
        // Get the request stream.
        Stream dataStream = request.GetRequestStream();
        // Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length);
        // Close the Stream object.
        dataStream.Close();
        // Get the response.
        WebResponse response = request.GetResponse();
        // Display the status.
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();
        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);
        // Read the content.
        string responseFromServer = reader.ReadToEnd();
        // Display the content.
        Console.WriteLine(responseFromServer);
        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();

    }

它告诉我

1)The name 'Encoding' does not exist in this context

2)System.Net.WebRequest does not contain a definition for GetStreamRequest and no extension method GetRequestStream accepting a first argument of type System.Net.WebRequest could be found (are you missing a using directive... etc

3)ContentLength的类似消息

4)GetResponse

的类似消息

我不知道我需要“使用”哪些库,即使我认为我正在“使用”正确的库,它也会给我带来错误。我做错了什么?

3 个答案:

答案 0 :(得分:5)

Encoding类位于System.Text命名空间中。你必须将它添加到“使用”。

就其他消息而言,这与Silverlight的限制有关。我认为,MSDN样本来自.NET Framework的“大”版本,不是吗?

在Silverlight中,您会看到,为了防止不良应用程序行为(例如阻止调用),某些内容是不允许的,并且由于资源限制,某些内容不受支持。

特别是ContentLength是后者之一。库将根据您写入请求的实际数据量确定内容长度。只要删除该行,你就可以了。

GetResponseStream()实际上是前者之一。这与此操作意味着实际打开网络连接这一事实有关,这可能需要一段时间。由于Silverlight中不允许阻止调用,因此GetResponseStream()方法也必须使用。

相反,你应该使用所谓的“异步模式” - 即方法对BeginGetResponseStream / EndGetResponseStream。您可以通过调用Begin方法并提供将在操作完成后调用的回调来执行此操作。然后,在该回调中,使用End方法获取操作的结果。像这样:

            request.BeginGetRequestStream( ar =>
            {
                var dataStream = request.EndGetRequestStream( ar );

                // Write the data to the request stream.
                dataStream.Write( byteArray, 0, byteArray.Length );
                // Close the Stream object.
                dataStream.Close();

                // and so on...

            }, null );

GetResponse方法也是如此。

答案 1 :(得分:3)

如有疑问,最好的办法是阅读文档。

例如,快速查看MSDN会告诉我EncodingSystem.Text的一部分(文档here)。

其次,您复制/粘贴到项目中的示例代码似乎不适用于Windows Phone。如果您查看Windows Phone WebRequest的文档,您会注意到手机不支持同步操作。您必须改为使用异步WebRequest.BeginGetRequestStream

顺便说一句,在查看MSDN文档时,请确保您正在阅读Silverlight版本(您可以选择靠近页面顶部,在文章标题下),如果您正在使用Windows Phone,请查找支持方法的蓝色电话图标。

答案 2 :(得分:1)

到目前为止,解决这些错误的最简单方法是:

  • 右键点击有问题的词 - 例如编码 - 在Visual Studio中应该加下划线'红色'或'蓝色'
  • 上下文菜单中的
  • 有一个选项Resolve
  • 此选项将包含子菜单,为您提供解决方法 - 通过包含“使用System.Text”或使用“System.Text.Encoding”

希望有所帮助。

希望你喜欢玩新工具 - 我最近走了另一条路,只需要一点时间就可以习惯不同的工具 - 让它花时间尝试享受吧!