什么是关闭?我们在.NET中有它们吗?
如果它们确实存在于.NET中,您能否提供一个代码片段(最好用C#)来解释它?
编辑:我浏览了Jon Skeet的文章,了解什么是闭包以及如何在.NET中使用它们.
我一直试图让.NET 4.5(System.IO.Compression.ZipArchive)中包含的"新"ZipArchive 在ASP.NET站点中工作.但似乎它不喜欢写入流HttpContext.Response.OutputStream.
我的下面的代码示例将抛出
System.NotSupportedException:不支持指定的方法
只要在流上尝试写入.
该CanWrite流上的属性返回true.
如果我将OutputStream与文件流交换,指向本地目录,它就可以工作.是什么赋予了?
ZipArchive archive = new ZipArchive(HttpContext.Response.OutputStream, ZipArchiveMode.Create, false);
ZipArchiveEntry entry = archive.CreateEntry("filename");
using (StreamWriter writer = new StreamWriter(entry.Open()))
{
writer.WriteLine("Information about this package.");
writer.WriteLine("========================");
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
[NotSupportedException: Specified method is not supported.]
System.Web.HttpResponseStream.get_Position() +29
System.IO.Compression.ZipArchiveEntry.WriteLocalFileHeader(Boolean isEmptyFile) +389
System.IO.Compression.DirectToArchiveWriterStream.Write(Byte[] buffer, Int32 offset, Int32 count) +94
System.IO.Compression.WrappedStream.Write(Byte[] buffer, Int32 offset, Int32 count) +41
Run Code Online (Sandbox Code Playgroud) 在WCF中,我不能将服务写入客户端接收的流吗?
WCF支持流请求,响应或两者.我想支持一种情况,即数据生成器(流式传输请求时的客户端或流式响应时的服务器)可以在流上写入.这支持吗?
类比是来自ASP.NET请求的Response.OutputStream.在ASPNET中,任何页面都可以在输出流上调用Write,并且客户端会接收内容.我可以在WCF服务中执行类似的操作 - 在客户端接收的流上调用Write吗?
让我用WCF插图解释一下.WCF中最简单的Streaming示例是将FileStream返回给客户端的服务.这是一个流式响应.实现此目的的服务器代码如下:
[ServiceContract]
public interface IStreamService
{
[OperationContract]
Stream GetData(string fileName);
}
public class StreamService : IStreamService
{
public Stream GetData(string filename)
{
return new FileStream(filename, FileMode.Open)
}
}
Run Code Online (Sandbox Code Playgroud)
客户端代码是这样的:
StreamDemo.StreamServiceClient client =
new WcfStreamDemoClient.StreamDemo.StreamServiceClient();
Stream str = client.GetData(@"c:\path\on\server\myfile.dat");
do {
b = str.ReadByte(); //read next byte from stream
...
} while (b != -1);
Run Code Online (Sandbox Code Playgroud)
(例子来自http://blog.joachim.at/?p=33)
清楚吧?服务器将Stream返回给客户端,客户端调用Read.
客户端是否可以提供Stream,并且服务器可以在其上调用Write?
换句话说,不是拉模型 - 客户端从服务器提取数据 - 它是推模型,客户端提供"接收"流并且服务器写入其中.服务器端代码可能类似于:
[ServiceContract]
public interface IStreamWriterService
{
[OperationContract]
void SendData(Stream clientProvidedWritableStream); …Run Code Online (Sandbox Code Playgroud) .net ×2
.net-4.5 ×1
asp.net-4.5 ×1
c# ×1
closures ×1
httpcontext ×1
outputstream ×1
streaming ×1
wcf ×1