相关疑难解决方法(0)

什么是.NET中的'闭包'?

什么是关闭?我们在.NET中有它们吗?


如果它们确实存在于.NET中,您能否提供一个代码片段(最好用C#)来解释它?


编辑:我浏览了Jon Skeet的文章,了解什么是闭包以及如何在.NET中使用它们.

.net closures

190
推荐指数
4
解决办法
4万
查看次数

使用HttpContext OutputStream写入ZipArchive

我一直试图让.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)

c# outputstream httpcontext .net-4.5 asp.net-4.5

36
推荐指数
3
解决办法
1万
查看次数

WCF和流请求和响应

在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 streaming wcf

13
推荐指数
1
解决办法
1万
查看次数