如何使用WebClient在Web服务器上编写文件

时间:2013-01-28 15:00:05

标签: silverlight webserver

我使用以下代码在异步(Silverlight 4)上下文中将一个简单文件写入Web服务器:

    public void WriteToServerAsync(string _input, Uri _uri, Action<bool> _writeComplete)
    {
        var client = new WebClient();
        var bytes = Encoding.UTF8.GetBytes(_input);
        var inputStream = new MemoryStream(bytes);
        client.OpenWriteCompleted += (s, e) =>
        {
            var buffer = new byte[4096];
            var bytesRead = 0;
            while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                e.Result.Write(buffer, 0, bytesRead);
            }
            e.Result.Close();
        };
        client.WriteStreamClosed += (s, e) =>
        {
            _writeComplete(e.Error == null);
        };
        client.OpenWriteAsync(_uri);
    }

我用

来称呼它
    public void TestWriteToServer()
    {
        var uri = new Uri( GetAppSetting( "MLCalculations" ) );
        WriteToServerAsync("This is some stuff to write", uri, (b) =>
        {
            // All done!
        });
    }

GetAppSetting调用返回的字符串类似于

http://servername/MainDirectory/Writeable/TestFile.txt

我遇到的问题是在client.WriteStreamClosed事件处理程序中,其中e.Error有“远程服务器返回错误:NotFound。”

在Web服务器上,有一个文件结构C:\ inetpub \ wwwroot \ MainDirectory \ Writeable。 MainDirectory文件夹上的安全性表明IIS_IUSRS具有完全控制权,而Writeable文件夹也是如此,尽管MainDirectory上的复选标记是粗体,而在可写入时它们是灰色的。

我还尝试将“原始”文件放入目标目录,以防它是“创建”问题,但我得到的结果相同。

我对WebClient.OpenReadAsync没有任何问题。 我错过了什么?

1 个答案:

答案 0 :(得分:0)

对文件夹权限进行的暗淡检查仅表示这些权限是从父文件夹继承的。

10次中有9次,臭名昭着的“未找到”错误是由异常服务器端引起的。如果您查看IIS日志,您可能能够追踪状态代码为500的条目(服务器错误)。

你可以调试网络服务吗?如果没有,您可以编辑它以提供额外的跟踪。 该错误几乎肯定是由服务本身的异常引起的,所以一旦你跟踪了错误服务器端,你就会顺利进行。

如果你无法弄明白,也许你可以发布网络服务的代码?