0

我正在使用以下代码在异步(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 上的复选标记是粗体,而在 Writeable 上它们是灰色的。

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

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

4

1 回答 1

0

对您的文件夹权限的灰色检查仅表示这些权限是从父文件夹继承的。

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

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

如果您无法弄清楚,也许您可​​以发布 Web 服务的代码?

于 2013-01-30T20:16:18.767 回答