今天就跟大家聊聊有关在调用HttpRequest.GetBufferlessInputStream之后不支持此方法或属性。怎么办,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
在.net 4.5中,WCF利用缓冲区较少的输入流来实现可伸缩性优势。因此,当您尝试访问HttpContext.Current.Request.InputStream属性时,您可能会遇到以下异常,因为InputStream属性会尝试让您处理Classic流,因为它们都不兼容。您可能还会看到HttpContext.Current.Request.Form参数的另一个副作用变为空。
“ 在调用HttpRequest.GetBufferlessInputStream之后,不支持此方法或属性。”
1.在同一个WCF项目中添加一个简单的HttpModule,它将在WCF读取它之前访问每个请求的InputStream属性,以便它将强制HttpContext.Request.ReadEntityBody为“Classic”并确保兼容性。
namespace SKWcfService { public class WcfReadEntityBodyModeWorkaroundModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.BeginRequest += context_BeginRequest; } public void context_BeginRequest(object sender, EventArgs e) { //这将强制HttpContext.Request.ReadEntityBody为“Classic”并确保兼容性。 Stream stream = (sender as HttpApplication).Request.InputStream; } } }
2.
在<configuration> <modules>设置中添加以下行,在web.config中注册此模块。
<system.webServer> <modules runAllManagedModulesForAllRequests="true" > <add name ="WcfReadEntityBodyModeWorkaroundModule" type="SKWcfService.WcfReadEntityBodyModeWorkaroundModule"/> </modules> <!-- 若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。 在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。 --> <directoryBrowse enabled="true" /> </system.webServer>
如果您的项目无法修改,那么您可以在单独的程序集中编写此Http模块,单独GAC,并在web.config中注册此模块。
现在尝试访问它应该成功的服务!
看完上述内容,你们对在调用HttpRequest.GetBufferlessInputStream之后不支持此方法或属性。怎么办有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。