Webclient 双向使用二进制文件

2024-02-04

网络客户端 http://msdn.microsoft.com/en-us/library/system.net.webclient%28v=vs.95%29.aspx用于将指令文件(最多 1 兆字节)上传到服务器,并以二进制数据形式接收该操作指令集作为响应(最多 1 兆字节)。

我可以上传二进制文件并下载二进制文件,但无法使用相同的请求/响应命令来执行此操作。这意味着,不同的网络客户端可以做到这一点。在这种情况下,它会丢失对服务器上设置的流的引用。

如何在一个序列中写入和读取二进制数据?

.

服务器脚本

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

            'Setup data reader
            If cRead Is Nothing Then cRead = New ReadDataFromContext
            cRead.Read(context) 'read data from 'context.Request.InputStream'


            If cWrite Is Nothing Then cWrite = New WriteDataToContext
            cWrite.Write(context) 'write data to 'context.Response.OutputStream'


        End Sub

.

客户类

Partial Public Class MainPage
    Inherits UserControl
    Private WithEvents WCUpload As WebClient
    'Private WithEvents WCDownload As WebClient
    Private Stream As IO.Stream

    Dim U As New Uri("http://localhost:51001/communicator.ashx", UriKind.Absolute)


    Public Sub New()
        InitializeComponent()
        WCUpload = New WebClient
        'WCDownload = New WebClient

    End Sub

    Private Sub btnTest_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles btnTest.Click
        WCUpload.OpenWriteAsync(U)
    End Sub


    'This methode is never called if using WCUpload (on WCDownload it works but WCDownload has no more data)
    'Private Sub WC_OpenReadCompleted(sender As Object, e As System.Net.OpenReadCompletedEventArgs) Handles WCDownload.OpenReadCompleted
    '    Dim D(e.Result.Length - 1) As Byte
    '    e.Result.Read(D, 0, D.Length)
    '    Me.btnTest.Content = System.Text.Encoding.UTF8.GetString(D, 0, D.Length)
    'End Sub

    Private Sub WC_OpenWriteCompleted(sender As Object, e As System.Net.OpenWriteCompletedEventArgs) Handles WCUpload.OpenWriteCompleted
        Me.Stream = e.Result

        Dim D() As Byte = System.Text.Encoding.UTF8.GetBytes("Hallo Timo")
        Me.Stream.Write(D, 0, D.Length)
        Me.Stream.Close()
    End Sub

    Private Sub WC_WriteStreamClosed(sender As Object, e As System.Net.WriteStreamClosedEventArgs) Handles WCUpload.WriteStreamClosed
        'WC.OpenReadAsync(U)

        'WCDownload.OpenReadAsync(U)

        Me.Stream.Position = 0 '<<--- ERROR, cannot access to disposed object
        Dim D(Me.Stream.Length - 1) As Byte
        Me.Stream.Read(D, 0, D.Length)
        Me.btnTest.Content = System.Text.Encoding.UTF8.GetString(D, 0, D.Length)

    End Sub

    Public Sub PushData(ByVal StreamIn As IO.Stream, ByVal StreamOut As IO.Stream)
        Dim Buffer(4096 - 1) As Byte
        Dim BytesRead As Integer
        On Error Resume Next

        'RaiseEvent Progress(Me, 0)

        Do
            BytesRead = StreamIn.Read(Buffer, 0, Buffer.Length)
            If BytesRead <= 0 Then Exit Do
            StreamOut.Write(Buffer, 0, BytesRead)
            'RaiseEvent Progress(Me, StreamOut.Length / StreamIn.Length * 99) 'max 99 to raise the event with 100%
        Loop

        'RaiseEvent Progress(Me, 100)
    End Sub
End Class

在我看来,你只是在寻找UploadData方法,它发送一个byte[]request-body 到服务器,并返回byte[]给客户端的响应主体。简单如下:

byte[] req = ...;
byte[] resp;
using(var client = new WebClient()) {
    resp = client.UploadData(address, req);
}

最终,http 是一种请求/响应协议 - 不过,您可以按顺序执行多个请求。如果您需要更大的灵活性,我建议您查看网络套接字,它允许两端发送临时信息。


对于 silverlight 上的异步使用,请尝试 HttpClient 的 PCL 版本 - 类似的 api,但比 silverlight 提供的开箱即用的实现更完整:http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient-for-net-framework-and-windows-phone.aspx http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient-for-net-framework-and-windows-phone.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webclient 双向使用二进制文件 的相关文章

  • 在运行时设置 DataGridView 上的 DataFormatString?

    是否可以在运行时设置 ASP NET DataGridView 中的列或单元格的 DataFormatString 属性 这应该有效 BoundField priceField grid Columns 0 as BoundField pr
  • 在多个网页(.cshtml 文件)中使用 Razor @functions

    我有以下功能 我希望可用于我的 asp net 网页 2 应用程序中的多个 cshtml 视图 如何使该功能可用于应用程序中的任何视图 而不是仅一个视图 functions public bool DisplayButton String
  • 检测 SignalR Hub 客户端立即断开连接

    SignalR Hub OnDisconnected 何时在服务器端引发 对于崩溃或关闭而不调用Stop method 我正在使用 SignalR NET 客户端进行测试 而不是 javascript 客户端 如果我打电话给Stop客户端上
  • 反序列化嵌套类时不需要 xmlns=''

    我在尝试在服务器上序列化类 将其发送到客户端并在目标上反序列化时遇到问题 在服务器上我有以下两个类 XmlRoot StatusUpdate public class GameStatusUpdate public GameStatusUp
  • 将标签文本的一部分设置为粗体

    有什么办法可以使一部分label text要大胆吗 label text asd string 想要string部分要加粗 有可能吗 这怎么办 下面的类说明了如何通过覆盖来做到这一点OnPaint in the LabelWinForms
  • 设置asp.net验证器的顺序

    我使用 3 个验证器来验证文本框 但当在文本框中输入无效值时 所有验证器都会被触发 但我希望这些验证器按照特定的顺序工作 以便用户可以一一解决这些错误
  • 您会认为这是单例/单例模式吗?

    想象一下 在 Global asax cs 文件中 我有一个实例类作为私有字段 我们这样说 private MyClass myClass new MyClass 我在 Global 上有一个名为 GetMyClass 的静态方法 它获取当
  • jQuery UI 对话框 + 验证

    我在单击 保存 后使用 Jquery Validate 验证 jQuery UI 对话框时遇到问题 这是我创建 Jquery 对话框的代码 它从目标 href URL 加载对话框 document ready dialogForms fun
  • ASP.NET预编译的优点是什么?

    使用 Aspnet compiler exe 代替通过 Visual Studio 进行的传统发布有多有用 那么资源 resx 文件又如何呢 与简单的 xcopy 相比 预编译有两个主要优点 文件系统不会包含所有代码 aspx文件和后面的所
  • .NET 内存不足故障排除

    在阅读了几篇有关 NET 技术中的内存的启发性文章后 Out of Memory 不是指物理内存 https learn microsoft com en us archive blogs ericlippert out of memory
  • Asp.net错误无法加载文件或程序集[重复]

    这个问题在这里已经有答案了 可能的重复 计算机崩溃后 我的 Visual Studio 2010 将无法加载程序集 https stackoverflow com questions 4975455 after a computer cra
  • Windows Phone 7 图表/图形控件

    我们正在开发一个 Windows Phone 7 原型应用程序 并且需要一个图形 图表控件来使用 我们看了银光工具包 http silverlight codeplex com 其中有一些看起来效果很好的控件 但是 我们无法让它发挥作用 每
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • 为什么 appcmd.exe 解锁配置在 Azure 模拟器上不起作用?

    我最近升级到 Azure 2 1 SDK 现在我的部分功能遇到了问题web config在计算模拟器上运行时处于 Web 角色中 我的web config包含这个
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单

随机推荐

  • Rails Activeadmin - 自定义关联选择框

    在我的 Rails 应用程序中 我有以下模型 class Idea lt ActiveRecord Base belongs to user end class User lt ActiveRecord Base has many idea
  • 如何从 ASP.Net OpenID Connect OWIN 组件设置声明?

    我对使用新的 ASP Net OpenID Connect 框架同时在身份验证管道中添加新声明有疑问 如下面的代码所示 我不确定幕后到底发生了多少 魔法 我认为我的大部分问题都围绕着对 OWIN 身份验证中间件而不是 OpenID Conn
  • 运行 React 应用程序时找不到模块“@babel/plugin-transform-react-jsx-source”

    我刚刚创建了一个 React 应用程序create react app aquastars然后使用弹出依赖项yarn run eject当我运行该应用程序时 出现以下错误 找不到模块 babel plugin transform react
  • VS2010 LNK1181 重建带有依赖项的项目时

    我有一个包含两个 C CLR 项目的解决方案 一个项目引用另一个项目 因此项目依赖项和构建顺序正确反映了这一点 两个项目都针对相同的输出文件夹 依赖项目的依赖配置为Copy Local false 如果我自己 重建 依赖关系 它会构建得很好
  • servlet 引擎在调用 servlet 之前是否读取整个请求?

    Servlet 引擎 例如Tomcat or Jetty 接收 HTTP 请求并使用 servlet 调用HttpServletRequest对象 其中包含一个InputStream请求正文的 现在我想知道引擎是否已经读取整体来自网络的请求
  • (AWS) Athena:查询结果似乎太短

    我的 Athena 查询的结果似乎太短 试图找出为什么 Setup 胶水目录 尺寸为 118 6 G 数据 以 CSV 和 JSON 格式存储在 S3 中 Athena Query 当我查询整个表的数据时 每次查询只得到 40K 条结果 一
  • 在 Netbeans GUI Builder 中开发现有 GUI 代码

    我正在 Eclipse 中做项目 我做了 Swing 部分 但现在 我希望使用 Netbeans 来完成项目的 Swing 部分 因为它更容易完成 而且我能够更整洁地完成它 因为我对 swing 及其布局管理器没有太多经验 这是我在 sta
  • 如何强制刷新文件

    假设我有以下代码 include
  • Android上传大文件

    我对 Android 开发非常陌生 我正在尝试将大小为 25 到 50 MB 的文件上传到 Web 服务器 但出现内存不足错误 我在过去的两天里苦苦挣扎 不知道我哪里出了问题 对我哪里出错有什么建议吗 我正在处理的代码是 private F
  • Firebase 部署失败 - 找不到functions.yaml。必须使用http发现[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试部署 firebase 云功能 但不断收到此错误 最奇怪的部分是 我让它工作正常 但从 firebase 与云视觉对话切
  • Angular 4 项目中功能性 e2e 量角器测试中的模拟休息调用

    我们有一个庞大的项目 我们编写了很多测试用例 在我们的 e2e 功能测试用例中涵盖了很多真实场景 的用户行为 随着测试的进行 它会进行大量的休息调用来完成测试用例 当我们在酱汁实验室中覆盖不同的浏览器时 它会增加 5 9 倍 我想要的是模拟
  • 如何在Dockerfile中访问云运行环境变量

    我已经构建了一个容器化的 python 应用程序 它使用本地运行没有问题 env文件和一个docker compose yml编译的文件撰写构建 然后我就可以像这样在 Dockerfile 中使用变量 ARG APP USR ENV APP
  • 如何使FactoryGirl.create影响另一条记录的属性?

    在网上商店应用程序中 通常在booking一个产品的预订控制器创建动作执行order save这反过来又激活必要的 before save 方法order sum of all bookings 当为查看订单列表的管理员构建 RSpec 测
  • 以字段名称作为参数的表达式谓词

    我使用这段代码 在 stackoverflow 上找到 来生成谓词 static class BuilderPredicate public static Expression
  • 错误 1 ​​libavcodec.so 文件格式无法识别 Android GL 动态壁纸

    我正在尝试为 android 制作一个动态壁纸 播放位于 android asset 设备上的 mp4 视频 以我正在使用的示例为例 它实际上在运行时将文件复制到 SD 卡 无关紧要 我找到了这个example https github c
  • Angular 5 按日期排序

    我有一张课程表 我想按日期排序 由于 Angular 5 没有 orderBy 管道 并且到目前为止我找到的所有解决方案都只能应用于数字和字符串 如果有人可以帮助我 我将不胜感激 这是我的桌子的主体 tbody tr th lesson d
  • 如何使用 sed (或类似的)删除两个 html 标签之间的所有行?

    我有一个如下所示的文件 lt stuff gt lt stuff gt 我试图删除 HEAD 标签之间 包括 HEAD 标签 之间的所有内容 但似乎无法使其工作 我想 sed i e s lt HEAD gt g file HTML 应该可
  • 将逻辑 and 应用于布尔值列表

    考虑以下 Scala 中的布尔值列表 List true false false true 您将如何使用foldRight 或foldLeft 模拟对列表中的所有值执行逻辑AND 的功能 而不是使用foldLeft Right 您还可以使用
  • 为什么切片[:-0]在Python中返回空列表

    今天在编写一些单元测试时偶然发现了一些有点令人困惑的事情 blah a b c blah 3 blah 2 a blah 1 a b blah 0 我一生都无法弄清楚为什么blah 0 应该是这样 该模式似乎绝对表明它应该是 a b c 任
  • Webclient 双向使用二进制文件

    网络客户端 http msdn microsoft com en us library system net webclient 28v vs 95 29 aspx用于将指令文件 最多 1 兆字节 上传到服务器 并以二进制数据形式接收该操作