- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
也许这似乎是一个奇怪的问题,但我遇到了以下情况:
我尝试向服务发出发布请求,并添加我选择的发布数据,从请求中创建一个 Stream 并使用 StreamWriter 在其上写入正文。
但是,在我实际执行请求(使用 GetResponse)之前,甚至在我写入流对象之前,我就得到了一个“无法连接异常”
var stream = request.GetRequestStream();
最佳答案
.NET I/O API 通常在 streams 上运行,它们是允许开发人员读取和写入有序数据序列的 API。通过对通用 API 进行读写,它使通用库能够对流进行操作以执行强大的操作:压缩、加密、编码等(顺便说一句,类似地处理不同类型的 I/O 历史悠久,最著名的是在 UNIX其中everything is a file。)
尽管在许多不同类型的流中读取和写入数据的工作方式非常相似,但打开一个流要通用得多。考虑一下用于打开文件、发出 HTTP 请求和执行数据库查询的截然不同的 API。
因此,.NET 的 Stream
类没有泛型 Open()
方法,因为在不同类型的流之间使流进入打开状态是非常不同的。相反,流 API 期望得到一个已经打开的流,其中“打开”意味着它已准备好被写入和/或读取。
因此,在 .NET 中有一个典型的 I/O 模式:
HttpWebRequest.GetResponse
做。
Stream
因此,您只需在发送到服务器之前将小 block 数据加载到 RAM 中。请记住
Stream
没有
Open()
方法,因此您的 API 必须提供开放流。
HttpWebRequest.GetRequestStream
必须建立网络连接,因为如果没有,那么流将被关闭并且您无法写入它。
Stream
的类。只调用
GetRequestStream
尽可能晚,然后将所有方法委托(delegate)给底层请求流。像这样作为起点:
using System.Net;
using System.Threading.Tasks;
using System.Threading;
class DelayConnectRequestStream : Stream
{
private HttpWebRequest _req;
private Stream _stream = null;
public DelayConnectRequestStream (HttpWebRequest req)
{
_req = req;
}
public void Write (byte[] buffer, int offset, int count)
{
if (_stream == null)
{
_stream = req.GetRequestStream();
}
return _stream.Write(buffer, offset, count);
}
public override WriteAsync (byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
if (_stream == null)
{
// TODO: figure out if/how to make this async
_stream = req.GetRequestStream();
}
return _stream.WriteAsync(buffer, offset, count, cancellationToken);
}
// repeat the pattern above for all needed methods on Stream
// you may need to decide by trial and error which properties and methods
// must require an open stream. Some properties/methods you can probably just return
// without opening the stream, e.g. CanRead which will always be false so no need to
// create a stream before returning from that getter.
// Also, the code sample above is not thread safe. For
// thread safety, you could use Lazy<T> or roll your own locking.
}
关于c# - 为什么 HttpWebRequest.GetRequestStream() 尝试连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41425966/
google 了几天后,我确实无法解决所描述的问题。希望这里能找到解决办法 在同一台服务器上调用 WCF 服务时,我使用了附加代码。我在调用 WebReq.GetRequestStream() 时随机
代码示例: HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://some.existing.url");
我有一个很奇怪的问题。 我有一个由 Windows 服务托管的 wcf 调用的方法,当该方法尝试执行 GetRequestStream() 时,我们返回一个异常“无法连接到远程服务器” string
我已经编写了一些代码来发送和读取来自监听器的文本。这在第 1 次和第 2 次交换上运行良好,但在第 3 次发送时,调用 GetRequestStream() 和实际写入数据之间存在很长的延迟。 我已经
也许这似乎是一个奇怪的问题,但我遇到了以下情况: 我尝试向服务发出发布请求,并添加我选择的发布数据,从请求中创建一个 Stream 并使用 StreamWriter 在其上写入正文。 但是,在我实际执
我在 C# .NET 3.5 CompactFramework 中有一个程序,它从 C# WebService 请求数据: public SynchronisationResult Get(I
我正在使用下面的代码将大文件上传到服务器,并注意到将 FileStream 复制到 GetRequestStream 会创建字节数组并将其保存在内存中。这增加了大对象堆,我不想要它。也许有人知道如何解
我正在开发一个从各种服务收集数据的异步 Http 爬虫,目前,我正在使用执行串行 HttpWebRequest 调用以从服务发布/获取数据的线程池。 我想过渡到异步 Web 调用(BeginGetRe
帮助...我不明白为什么 HttpWebRequest.GetRequestStream() 会抛出超时异常...它总是在尝试建立第二个(及后续)时发生使用 POST 的连接。基本上,我正在尝试创建连
Exception is thrown at the first "using": using (var os = firstRequest.GetRequestStream()) 我现在的猜测是它与
我使用 C#。 我第一次在我的代码中使用 WebRequest GetRequestStream() 时,最多需要 20 秒。之后不到 1 秒。 下面是我的代码。 “this.requestStrea
我尝试通过 htpp 发送大文件并具有以下代码: string filePath = ""; string url = ""; using (var fileStream = new FileStre
我有一个函数可以向接受 json 的 api 服务器发出 http 请求: private static string DoRequest(object objToSend, string Url)
我在 .NET 中创建了一个基本的 RESTful 服务,它允许我对调用方法指定的 Uri 进行基本的 Get 和 Post 调用。在我的 post 方法中,我试图用我的 HttpWebRequest
我正在尝试将 paypal 集成到 Web 应用程序中,但没有成功。我已经尝试了很多东西,但我总是回到一个特定的错误。我现在正在尝试使用 paypal 集成向导,当我获得提供的代码时,我收到一条错误消
我是 C# 和 Windows Phone 的新手,我正在尝试制作一个执行 JSON 请求的小型应用程序。我正在按照这篇文章中的示例 https://stackoverflow.com/a/49888
我正在调用托管在 Apache 服务器上的 API 来发布数据。我正在使用 HttpWebRequest 在 C# 中执行 POST。 API 在服务器上同时具有普通 HTTP 和安全层 (HTTPS
我有一个 C# Windows 应用程序(.Net 3.0 Framework),它使用 HttpWebRequest 调用 PHP Web 服务。 在 Win 7 & Vista 中,如果调用是通过
当我输入与我的 dot net 4.0 应用程序中使用的相同的值和设置时,针对 chrome 的 Advanced REST Client 使用值工作正常。 另一方面,当我尝试使用来自 dotnet
我的场景:我正在使用 iOS 版 Monotouch 创建 iPhone 应用程序。我正在调用基于 ASP.NEt MVC 4 Web API 的 http 服务来登录/注销。对于登录,我使用 POS
我是一名优秀的程序员,十分优秀!