Visual studio 2008 WebClient对.NET 3.5 CF真的不可用吗?

Visual studio 2008 WebClient对.NET 3.5 CF真的不可用吗?,visual-studio-2008,compact-framework,windows-ce,webclient,system.net,Visual Studio 2008,Compact Framework,Windows Ce,Webclient,System.net,我的应用程序以Windows CE为目标;它使用紧凑的框架 我复制了一些其他地方使用WebClient的工作代码,但它无法编译,并说,“找不到类型或命名空间名称'WebClient'(是否缺少using指令或程序集引用?) 我有一个“使用系统.Net 由于该错误,我还得到“名称'HttpRequestHeader'在当前上下文中不存在” 代码是: private static void SendXMLFile(string xmlFilepath, string uri) { using

我的应用程序以Windows CE为目标;它使用紧凑的框架

我复制了一些其他地方使用WebClient的工作代码,但它无法编译,并说,“找不到类型或命名空间名称'WebClient'(是否缺少using指令或程序集引用?)

我有一个“使用系统.Net

由于该错误,我还得到“名称'HttpRequestHeader'在当前上下文中不存在”

代码是:

private static void SendXMLFile(string xmlFilepath, string uri)
{
    using (var client = new WebClient())
    {
        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        StringBuilder sb = new StringBuilder();
        using (StreamReader sr = new StreamReader(xmlFilepath))
        {
            String line;
            while ((line = sr.ReadLine()) != null)
            {
                sb.AppendLine(line);
            }
        }
        // I don't know why the prepended equals sign is necessary, but it is
        string allLines = "=" + sb.ToString();
        var result = client.UploadString(uri, "POST", allLines);
    }
}
如果WebClient可用于我的场景,我需要什么参考/使用

如果WebClient不适用于我的场景,有什么追索权/替代权

如果没有追索权/替代品,谁能/将送我一瓶黑莓白兰地

更新 我试图根据自己的情况调整答案,但马上遇到了一个问题:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri);
request.Method = method;
问题是“method”无法识别(获取红色波形的大小写,并且“名称‘method’在当前上下文中不存在”

更新2 我明白了-方法是传入的字符串;我需要的是:

request.Method = "POST";
更新3 我还不确定这是否真的有效,但它确实可以编译,而且似乎有意义,所以我将尝试一下:

private static string SendXMLFile(string xmlFilepath, string uri, int timeout)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version10;
    request.Method = "POST";

    StringBuilder sb = new StringBuilder();
    using (StreamReader sr = new StreamReader(xmlFilepath))
    {
        String line;
        while ((line = sr.ReadLine()) != null)
        {
            sb.AppendLine(line);
        }
        byte[] postBytes = Encoding.UTF8.GetBytes(sb.ToString());
        if (timeout < 0)
        {
            request.ReadWriteTimeout = timeout;
            request.Timeout = timeout;
        }

        request.ContentLength = postBytes.Length;
        request.KeepAlive = false;

        request.ContentType = "application/x-www-form-urlencoded";

        try
        {
            Stream requestStream = request.GetRequestStream();

            requestStream.Write(postBytes, 0, postBytes.Length);
            requestStream.Close();

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                return response.ToString();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            request.Abort();
            return string.Empty;
        }
    }
}
私有静态字符串SendXMLFile(字符串xmlFilepath、字符串uri、int超时)
{
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(uri);
request.KeepAlive=false;
request.ProtocolVersion=HttpVersion.Version10;
request.Method=“POST”;
StringBuilder sb=新的StringBuilder();
使用(StreamReader sr=newstreamreader(xmlFilepath))
{
弦线;
而((line=sr.ReadLine())!=null)
{
给某人加上一行(一行);
}
byte[]postBytes=Encoding.UTF8.GetBytes(sb.ToString());
如果(超时<0)
{
request.ReadWriteTimeout=超时;
request.Timeout=超时;
}
request.ContentLength=postBytes.Length;
request.KeepAlive=false;
request.ContentType=“application/x-www-form-urlencoded”;
尝试
{
Stream requestStream=request.GetRequestStream();
Write(postBytes,0,postBytes.Length);
requestStream.Close();
使用(var response=(HttpWebResponse)request.GetResponse())
{
返回response.ToString();
}
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
request.Abort();
返回字符串。空;
}
}
}

WebClient不存在,尽管拥有它并不是那么重要。您可以通过HttpWebRequest来完成大部分工作

以下内容(来自OpenNETCF扩展):

private string SendData(string方法、string目录、string数据、string contentType、int超时)
{
锁定(m_syncRoot)
{
directory=directory.Replace('\\','/');
如果(!directory.StartsWith(“/”)
{
directory=“/”+目录;
}
string page=string.Format(“{0}{1}”,设备地址,目录);
HttpWebRequest请求=(HttpWebRequest)WebRequest.Create(页面);
#如果!WINDOWS\u手机
request.KeepAlive=false;
request.ProtocolVersion=HttpVersion.Version10;
#恩迪夫
request.Method=Method;
//将请求字符串转换为字节流
字节[]postBytes;
如果(数据!=null)
{
postBytes=Encoding.UTF8.GetBytes(数据);
}
其他的
{
postBytes=新字节[0];
}
#如果!WINDOWS\u手机
如果(超时<0)
{
request.ReadWriteTimeout=超时;
request.Timeout=超时;
}
request.ContentLength=postBytes.Length;
request.KeepAlive=false;
#恩迪夫
if(contentType.IsNullOrEmpty())
{
request.ContentType=“application/x-www-form-urlencoded”;
}
其他的
{
request.ContentType=ContentType;
}
尝试
{
Stream requestStream=request.GetRequestStream();
//现在发送它
Write(postBytes,0,postBytes.Length);
requestStream.Close();
使用(var response=(HttpWebResponse)request.GetResponse())
{
返回GetResponseString(response);
}
}
捕获(例外情况除外)
{
Debug.WriteLine(例如消息);
request.Abort();
返回字符串。空;
}
}
}

谢谢;不过,我需要做的是使用RESTful方法将数据从手持设备发送到服务器(Web API应用程序)。是的,上面的方法是我专门用于这样做的方法。例如,一篇帖子看起来是这样的:
发送数据(“POST”,“svcpath”,“data”,“text/xml”,5000);
设备地址
实际上不是一个“设备”但是目标REST服务(在我的例子中,它恰好运行在我们称之为“设备”而不是服务器上——前提是一样的)哦,好吧——是的,“DeviceAddress”让我陷入了一个循环(不是编程循环,更像是一个水果循环)。
private string SendData(string method, string directory, string data, string contentType, int timeout)
{
    lock (m_syncRoot)
    {
        directory = directory.Replace('\\', '/');
        if (!directory.StartsWith("/"))
        {
            directory = "/" + directory;
        }

        string page = string.Format("{0}{1}", DeviceAddress, directory);

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(page);
#if !WINDOWS_PHONE
        request.KeepAlive = false;
        request.ProtocolVersion = HttpVersion.Version10;
#endif
        request.Method = method;

        // turn our request string into a byte stream
        byte[] postBytes;

        if (data != null)
        {
            postBytes = Encoding.UTF8.GetBytes(data);
        }
        else
        {
            postBytes = new byte[0];
        }

#if !WINDOWS_PHONE
        if (timeout < 0)
        {
            request.ReadWriteTimeout = timeout;
            request.Timeout = timeout;
        }

        request.ContentLength = postBytes.Length;
        request.KeepAlive = false;
#endif
        if (contentType.IsNullOrEmpty())
        {
            request.ContentType = "application/x-www-form-urlencoded";
        }
        else
        {
            request.ContentType = contentType;
        }

        try
        {
            Stream requestStream = request.GetRequestStream();

            // now send it
            requestStream.Write(postBytes, 0, postBytes.Length);
            requestStream.Close();


            using (var response = (HttpWebResponse)request.GetResponse())
            {
                return GetResponseString(response);
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
            request.Abort();
            return string.Empty;
        }
    }
}