我使用以下代码在异步(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没有任何问题。 我错过了什么?
答案 0 :(得分:0)
对文件夹权限进行的暗淡检查仅表示这些权限是从父文件夹继承的。
10次中有9次,臭名昭着的“未找到”错误是由异常服务器端引起的。如果您查看IIS日志,您可能能够追踪状态代码为500的条目(服务器错误)。
你可以调试网络服务吗?如果没有,您可以编辑它以提供额外的跟踪。 该错误几乎肯定是由服务本身的异常引起的,所以一旦你跟踪了错误服务器端,你就会顺利进行。
如果你无法弄明白,也许你可以发布网络服务的代码?