我正在使用以下代码在异步(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 没有任何问题。我错过了什么?