首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在WCF客户端中查找Stream对象的长度?

在WCF客户端中查找Stream对象的长度,可以使用以下方法:

  1. 使用Stream.Length属性

Stream对象具有一个名为Length的属性,可以直接获取Stream对象的长度。例如:

代码语言:csharp
复制
Stream stream = GetStream();
long length = stream.Length;
  1. 使用BinaryReader.ReadBytes()方法

如果Stream对象是由BinaryReader对象创建的,可以使用BinaryReader.ReadBytes()方法读取Stream对象中的所有字节,并计算字节数组的长度。例如:

代码语言:csharp
复制
Stream stream = GetStream();
BinaryReader reader = new BinaryReader(stream);
byte[] bytes = reader.ReadBytes((int)stream.Length);
long length = bytes.Length;
  1. 使用Stream.Seek()方法

可以使用Stream.Seek()方法将Stream对象的位置设置为其末尾,然后使用Stream.Position属性获取Stream对象的长度。例如:

代码语言:csharp
复制
Stream stream = GetStream();
long length = stream.Seek(0, SeekOrigin.End);
stream.Seek(0, SeekOrigin.Begin);
  1. 使用Stream.CopyTo()方法

可以使用Stream.CopyTo()方法将Stream对象的内容复制到一个新的MemoryStream对象中,然后使用MemoryStream.ToArray()方法获取字节数组的长度。例如:

代码语言:csharp
复制
Stream stream = GetStream();
MemoryStream memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
long length = memoryStream.ToArray().Length;

以上方法都可以用于在WCF客户端中查找Stream对象的长度,具体使用哪种方法取决于具体的实现和需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WCF之旅(3):WCF实现双工通信

一、两种典型双工MEP 1.请求过程回调 这是一种比较典型双工消息交换模式表现形式,客户端进行服务调用时候,附加上一个回调对象;服务在对处理该处理,通过客户端附加回调对象(实际上是调用回调服务代理对象...客户端调用CalculatorService正常服务调用,那么服务执行过程借助于客户端服务调用时提供回调对象客户端操作进行回调,从本质上讲是另外一种形式服务调用。...结果显示是通过回调方式实现,所以需要借助于客户端提供回调对象(该对象客户端调用CalculatorService时候指定,介绍客户端代码实现时候会讲到)。...WCF,回调对象通过当前OperationContextGetCallback方法获得(T代表回调契约类型)。...WCF通过加锁机制保证服务对象独占性使用,也就是说服务执行开始会对服务对象加锁,该锁在服务操作结束之后释放。 回到我们例子,Add操作执行过程,服务端回调客户端操作进行运算结果显示工作。

999100

WCF技术剖析之十一:异步操作WCF应用(上篇)

本篇文章,我们专门来讨论多线程或者是异步操作WCF具体应用。 如果按照异步操作发生位置,我个人将WCF应用异步操作分为下面3种变体。...异步信道调用:客户端通过绑定创建信道向服务端发送消息,从而实现了对服务调用,不管消息通过信道向服务端发送方式是同步(采用请求-回复MEP进行消息交换)还是异步(采用单向MEP进行消息交换),客户端程序都可以通过代理对象异步地调用信道...图1 WCF多线程应用三种典型场景 为了方便客户端进行异步服务调用,最简便方式就通过SvcUtil.exe这个代码生成工具帮助我们生成机遇异步调用服务代理类。...事件处理器可以通过该参数得到异步方法执行结果(Result属性)和异步操作执行过程抛出异常(Error属性),以及得到执行异步操作显式指定信息(UserState)。...在下面的代码,我们通过一个匿名方法形式定义回调操作,由于回调操用输出运算结果时需要使用到参与运算操作数,我们通过BeginAdd方法最后一个object类型参数实现向回调操作传递数据,回调操作通过

76680

WCF技术剖析之十一:异步操作WCF应用(下篇)

说完了客户端异步服务调用(参阅WCF技术剖析之十一:异步操作WCF应用(上篇)),我们来谈谈服务端如何通过异步方式为服务提供实现。...得到相应MethodInfo对象后,同样通过反射调用服务实例。 二、如何创建异步服务 了解了异步操作定义和具体实现原理之后,我们通过一个简单实例演示异步操作WCF应用实现。...方法,根据文件名称创建FileStream对象,调用FileStreamBeginRead方法实现文件异步读取,并直接返回该方法执行结果:一个IAsyncResult对象。...EndRead方法,调用FileStreamEndRead读取文件内容,并关闭FileStream对象。...客户端通过添加服务引用方式生成相关服务代理代码和配置。你将会发现客户端生成服务契约和服务代理类,会有一个唯一操作Read。

758100

实例演示:TLSSSLWCF应用

从配置我们可以看出,寄宿服务唯一终结点采用了被设置成Transport模式,客户端凭证类型为NoneWS2007HttpBinding。...,还有一点需要说明是:默认情况下,客户端除了采用ChainTrust模式对证书进行认证之外,还具有一个认证规则,那就是要求终结点地址DNS和证书主体名称相匹配。...以我们创建这个程序为例,如果我们将客户端配置文件终结点地址从https://Jinnan-PC:3721/calculatorservice替换成https://localhost:3721/calculatorservice...该对话框设置新建站点名称(Default SSL Web Site),选择刚刚创建应用程序池(DefaultSSLAppPool),并为站点设置一个本地物理路径。...绑定类型列表中选择https,保持IP地址和端口默认值。SSL证书下拉框你会看到我们之前创建证书(Jinnan-PC),选择它作为站点SSL证书。点击确认按钮后,新站点被创建出来。

1.4K90

实例演示:TLSSSLWCF应用

接下来系列文章我们正是讨论关于身份认证主题。在前面我们已经谈到了,WCF认证属于“双向认证”,既包括服务对客户端认证(以下简称客户端认证),也包括客户端对服务认证(以下简称服务认证)。...《从两种安全模式谈起》,我们对TLS/SSL进行了简单介绍。我们知道,客户端和服务在为建立安全上下文而进行协商过程中会验证服务端X.509证书如否值得信任。...作为服务凭证证书通过服务行为ServiceCredentials来指定,对于WCF安全体系来说,ServiceCredentials是个非常重要对象本章后续文章我们将反复地使用到它。...而对于寄宿服务程序,我们力求简洁,Main方法仅仅包括如下代码。...本章后续内容,我们还将不断使用到它们。现在我们先看讨论一下如何通过ClientCredentials来改变客户端对服务证书认证模式。

1.4K80

响应式编程 Stream 对象实现原理

响应式和从前听说“面向事件编程”很像,是针对事件一种处理办法,且比从前on\off\emit方法来处理事件,响应式会做得更加优雅。 响应式编程基于“流(Stream)”这个对象。...,可以各开源函数库examples查看。...创建一个stream 要创建一个stream,需要知道stream对象涵盖方法和属性。这是一个引人深思问题,设想现实生活洗手间一条水管,包含哪些属性呢?...这样描述是不是很像reduxreducer?state通过一个个reducer,将最终产物交给store。...经过第一和第二步骤,形形色色stream被创造了出来,但是这个水管还是没有水流动,我们还要激活它,激活水源头。

1.9K00

WCF技术剖析之二十: 服务WCF体系是如何被描述?

服务寄宿手段是为一个WCF服务类型创建一个ServiceHost对象(或者任何继承于ServiceHostBase对象)。...本篇文章,我们将对服务描述进行全面的介绍。...客户端行为体现WCF如何进行服务调用方式,而服务端行为则体现了WCF请求分发方式。...ApplyClientBehavior方法与ApplyDispatchBehavior相对,通过修改客户端运行时(Client Runtime)属性,或者添加/替换客户端运行时某些可扩展对象,进而实现控制客户端行为目的...(Client Operation)和服务端操作(Dispatch Operation)概念,这是由于在运行时,基于相同OperationDescription创建操作对象客户端和服务端是不同

94460

面试算法:未知长度排序数组中进行快速查找

如果我们访问元素超出了数组长度,那么就会引发一次异常,请设计一个有效算法,输入数组A以及一个数值k,找到一个下标i,使得A[i] = k, 返回-1,如果数组A不存在等于k元素。...这道题跟我们以前处理查找问题不同之处在于,数组A长度无法确定。如果数组A长度确定的话,那么问题就退化为一个排序数组中进行查找问题,此时我们依靠二分查找法就能快速定位数组A是否包含给定元素。...问题在于,数组A长度无法提前确定,那么我们就不能直接使用二分查找,因为我们无法定位中点,使用二分查找时,我们需要知道起点b,终点e,然后定位中点m = (b+e)/2, 然后看A[m]与要查找数值关系...不确定长度排序数组中进行查找时,我们可以这么做。...,我们可以确定数组末尾一定在当前计算中点之前,因此调整二分查找区间末尾后,再次进行查找即可,注意代码实现,从没有考虑数组长度

57120

关于vim查找和替换

1,查找 normal模式下按下/即可进入查找模式,输入要查找字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。...set smartcase 将上述设置粘贴到你~/.vimrc,重新打开Vim即可生效 4,查找当前单词 normal模式下按下*即可查找光标所在单词(word), 要求每次出现前后为空白字符或标点符号...例如当前为foo, 可以匹配foo barfoo,但不可匹配foobarfoo。 这在查找函数名、变量名时非常有用。 按下g*即可查找光标所在单词字符序列,每次出现前后字符无要求。...即foo bar和foobarfoo均可被匹配到。 5,查找与替换 :s(substitute)命令用来查找和替换字符串。...^E与^Y是光标移动快捷键,参考: Vim如何快速进行光标移 大小写敏感查找 查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找

21.9K40

x.509证书WCF应用(CS篇)

WCF服务端和客户端之间,如果不作任何安全处理(即服务端),则所有传输消息将以明文方式满天飞,internet/intranet环境下无疑是很不安全...这一句意思就是c:\123\目录下输出WCF代理文件和配置文件 打开vs.net2008,再新建一个控制台应用程序,可以命名为Client 把c:\123\下生成二个文件MyService.cs...,运行结果如下: (转贴请注明来自"菩提树下杨过") 注意服务端server.exe输出信息3E4D4B64A90810B6CFF9B1DD2390D8C9488747BF与客户端证书完全吻合...最后来谈谈分发问题,上面这一系列测试都是同一台机器完成客户端总不可能总是跟服务端一台机器上,这个好办,IE里把MyClient证书导出,注意导出时要选择"是,导出私钥",然后把导出pfx文件连同客户端程序一起分发到目标客户机即可...,这里要注意几点: a.客户端App.config里,要把<endpoint address="net.tcp://localhost:8081/" localhost换成服务端Ip地址 b.

72370

x.509证书WCF应用(WebIIS篇)

在上一篇"x.509证书WCF应用(CS篇)"里,我们知道了如何在应用程序,利用x.509证书来验证WCF消息安全(没看过朋友建议先看下,地址https://cloud.tencent.com...WCF宿主IIS和普通应用程序里,原理虽然没什么不同,但在实际测试中发现,如果服务端与客户端都采用x.509证书来验证,服务端设置自定义验证客户端证书方法总是不起作用,无奈之下,只能在客户端采用了一种变相方法来验证客户端证书...,IE7里始终被认为不信任证书(也许是我makecert参数不对),导致IE7里测试SSL时,总是显示"证书错误,导航已阻止"之类,所以本例,我们换一种方式,用windows2003自带证书服务来申请...--下面这一行,测试过程,发现始终不起作用,只能放弃,转而在客户端配置中用findValue="ec0aa48043eab64714c92a0ff7fa0365e1b594af" x509FindType...欢迎转载,转载请注明来自cnblogs"菩提树下杨过" 编后语: 本文演示了如何将WCF HostIIS,并对服务端和客户端都采用x.509证书方式来验证,当然这种方式要求每个客户端机器上都必须安装服务端颁发证书

1.1K50

利用WCF改进文件流传输三种方式

WCF引入了一种专门针对数据流进行优化编码MTOM模型。下面我们使用编码模型和调用模型三种方式来改写文件流传输,以提高WCF应用程序性能。...WCFMTOM模型操作契约只能使用单个Stream对象作为参数或者返回类型。 ?...,主要方法目的是为了传输Stream对象,由于Stream是一个抽象类,所以这儿以文件流为操作对象来使用SendStream()这个方法。...这里服务契约通过设置属性CallbackContract来实现客户端回调功能。...3、 基于异步传输异步模型: 同步方式处理,文件传输时间是和文件长度密切相关,对于一个大容量文件传输,如果全部主线程执行,那么应用程序可能会等待很长时间,因此我们给予文件流以异步方法读写方法来实现性能改进

1.3K60

SAP 如何在调式查找标准程序权限对象

当我们尝试分析授权问题(SU53、SU24……)时,有许多不同交易很有用。 但是,某些情况下,调试检查授权对象很有用。...这很有用,例如,如果我们想确切地知道事务执行哪个点调用了给定授权对象,或者为给定操作调用了哪些授权对象。...在这种情况下,我们可以调试检查授权对象,使用语句 AUTHORITY-CHECK 断点,该语句用于检查 ABAP 上授权。 下面我们分析一个例子,debug下单时如何检查权限。...在这里,我们想知道正在调用哪个授权对象来控制生产订单发布。 第一步是事务 CO02 上打开生产订单。 发布命令之前,我们命令中键入“/H”以打开调试并按回车键。...在这里,我们可以看到正在检查授权对象 B_USERST_T,我们还可以确切地看到正在检查哪些值。

24220

使用WCF进行跨平台开发之二(IIS托管WCF服务并使用php平台调用)1.系统必备2.IIS托管WCF服务3.使用PHP调用托管IISWCF服务

上一篇,使用控制台托管了WCF服务,但是如果想从PHP和java平台调用,必须将其托管到IIS(并不是必须,还是有其他方式 比如windows azure) 1.系统必备      首先,必须打开...2.IIS托管WCF服务      IIS默认网站添加应用程序emp,并在高级设置,设置应用程序池为“ASP.NET v4.0”,并设置默认网站右键--编辑版定,http类型编辑IP地址和主机名...这里设置原因是,第一,php平台局域网另外一台机器上,主机名这里设置,是因为主机名影响wsdl生成,如果不设置,wsdl中生成location包括是托管机器名而不是ip地址。     ...新建虚拟目录对应实际目录,添加web.config文件,配置wcf服务和终结点,并打开元数据公开,然而,因为这里不是使用常用svc文件托管服务,所以需要serviceActivations节点配置服务...3.使用PHP调用托管IISWCF服务 PHP服务器打开浏览器,并浏览http://192.168.11.1/emp/EmployeeManagement.svc测试服务是否托管正常。 ?

2K70

未知长度超大数组中线性时间内查找第k大元素

给定一个长度为n数组,n是一个很大值,而且事先不知道n大小,给定一个确定数值k,要求设计一个找出数组第k大元素,要求算法需要空间不能超过O(k)。...如果选中元素比第k大元素小,那么左边元素就会少于k-1个,假设左边是t个元素,那么我们以同样方法右边元素查找第k - t - 1大元素就可以了。...如果选择元素比第k大元素大,那么P左边元素个数就会比k-1大,于是我们继续左边元素以同样方法P左边元素中继续查找第k大元素。...我们可以申请一个2k长度内存,每次从数组读入元素时就存入2k内存,当把内存填满后,用上面方法找到第k大元素,然后保留前k个元素,新读入元素填充后k个单位内存,每次2k内存填满后就使用上面方法查找第...由于每次2k个元素查找第k大元素所需时间复杂度为O(2k),总查找次数是 n/k,于是总时间复杂度是O(2k)* n\k = O(n)。

89120

Java8-Stream集合8种应用案例

也正是因为并行流采用了多线程方式去遍历数据,所以我们需要注意以下两点(自己遇到坑,可能还会有其他坑我没有发现): 1.避免并行流中使用线程不安全对象,比如ArrayList 2.主线程ThreadLocal...存储线程局部变量,不能再并行流获取 过滤 我们经常需要将集合中一些数据进行过滤,比如过滤集合负数,过滤一些权限相关数据,Java8之前我们更多是使用迭代器进行remove操作,Java8有了两种更加简介方法...去重 去重我们经常也会使用到,对集合了解程度不同,我们会使用不同方法,比如最简单方法遍历数据,使用新空集合接受数据,利用contains方法判断是否新集合add元素,其次就是使用HashSet...但是Java8有更加简洁方案,方案一:我们可以利用distinct()方法实现,如果去重元素不是基本类型而是对象的话,需要重写hashcode和equals方法,否则会去重失败。...,比如我们需要在集合中找到属性ID为10对象,将其取出,Java8之前我们通常会遍历集合,使用if判断,然后匹配到使用break跳出循环,但是Java8,我们可以使用anyMatch达到相同效果

1.7K30

怎样JavaScript创建和填充任意长度数组

没有空洞数组往往表现得更好 大多数编程语言中,数组是连续值序列。 JavaScript ,Array 是一个将索引映射到元素字典。...查找时会消耗更多时间,而且存储开销更大。 连续数据结构,对空洞进行标记。然后检查对应值是否是一个空洞,这也需要额外时间。...某些引擎,例如V8,如果切换到性能较低数据结构,这种改变将会是永久性。即使所有空洞都被填补,它们也不会再切换回来了。...关于 V8 是如何表示数组,请参阅Mathias Bynens文章“V8元素类型”【https://v8.dev/blog/elements-kinds】。...3 类似 Array 对象,其中只包含空洞。

3.2K30
领券