HttpContext.Current.Request.InputStream属性抛出异常“在调用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中注册此模块。

现在尝试访问它应该成功的服务!

转载于:https://my.oschina.net/u/2494395/blog/3093219

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值