Visual Studio 2012安装破坏了我的2010 WCF项目

Visual Studio 2012安装破坏了我的2010 WCF项目,wcf,visual-studio-2012,runtime-error,Wcf,Visual Studio 2012,Runtime Error,我已经安装了VS 2012,并在一些web项目上成功地使用了它,但它的某些问题导致我的web服务项目崩溃。我仍然在web服务项目上使用VS2010,并且在2012年还没有打开它 一切都可以正确编译和工作,除非它尝试在我引用的weblog项目中创建类的实例,然后抛出以下错误: 调用HttpRequest.GetBufferlessInputStream后不支持此方法或属性 我在项目中找不到明确使用GetBufferlessInputStream的任何地方 如果跳过weblog代码,一切都会正确执行

我已经安装了VS 2012,并在一些web项目上成功地使用了它,但它的某些问题导致我的web服务项目崩溃。我仍然在web服务项目上使用VS2010,并且在2012年还没有打开它

一切都可以正确编译和工作,除非它尝试在我引用的weblog项目中创建类的实例,然后抛出以下错误:

调用HttpRequest.GetBufferlessInputStream后不支持此方法或属性

我在项目中找不到明确使用GetBufferlessInputStream的任何地方

如果跳过weblog代码,一切都会正确执行

我找不到任何其他收到这个错误的人来尝试缩小它的范围,有什么想法从哪里开始

堆栈

   at System.Web.HttpRequest.get_InputStream()
   at OAS.Web.Log.WebEvent..ctor(EventType type, HttpContext context, String applicationName)
   at OAS.Web.Log.WebTrace..ctor(HttpContext context, String applicationName)
   at OAS.Web.AdvisorServices.Extensions.OperationLoggerParameterInspector.BeforeCall(String operationName, Object[] inputs) in C:\SourceControl\OAS\IM.NET3.0\Web\AdvisorServices\OAS.Web.AdvisorServices.Extensions\OperationLogger\OperationLoggerParameterInspector.cs:line 54


**编辑-奖金问题


为什么这些Framework 4.5属性会影响我的4.0解决方案?

注意:此问题已在.net 4.5.1中修复。您可以看到4.5.1中的修复。拥有.net 4.5.1后,添加以下appSetting以切换回旧行为

<configuration>      
<appSettings>
      <add key="wcf:serviceHostingEnvironment:useClassicReadEntityBodyMode" value="true" />
</appSettings> 
</configuration>
  • 通过在
    设置中添加这些行,在web.config中注册此模块

    <system.webServer>
        <modules>
            <!-- Register the managed module -->
            <add name="WcfReadEntityBodyModeWorkaroundModule" type="MyAssembly.WcfReadEntityBodyModeWorkaroundModule, MyAssembly" />
        </modules>
    
    
    
  • 如果您在经典模式下使用应用程序池,则需要将模块添加到web.config中的此部分:

    <system.web>
        <httpModules>
            <add name="WcfReadEntityBodyModeWorkaroundModule" type="MyAssembly.WcfReadEntityBodyModeWorkaroundModule, MyAssembly" />
        </httpModules>
    
    
    
  • 如果您的项目无法修改,那么您可以在单独的程序集中编写此Http模块,单独对其进行GAC并在web.config中注册此模块


    现在尝试访问该服务,它将为您成功

    我想是的,但是。。。你“清洗”了你的解决方案吗?只是清洗和重建,没有变化。一个微软的家伙在这里有一个答案,但现在它不见了。我说我应该尝试创建一个HttpModule,在调用WCF模块之前调用get_InputStream,它会强制ReadEntityBodyMode属性为classic而不是none,但我不确定如何强制我的模块在WCF模块之前被命中。另外,我不想这样做,但请看。简短回答:.NET 4.5是一个就地升级,实际上修复了.NET 4.0中的错误。我来自WCF产品团队,希望得到澄清,但找不到添加注释的方法,因此在此处作为答案进行回应。我们很高兴该解决方案对您有效,但我们也想知道这对客户有多普遍。为了评估这一点,您能否告诉我,您使用的代码是您正在使用的第三方组件,还是您在项目中使用的一些自定义代码。另外,这个日志代码在您遇到这个问题的地方到底做了什么?谢谢。@DustinBrooks你好Dustin,我来自Microsoft.NET Framework团队。我们希望更好地了解您的场景,我们正在考虑在即将发布的更新中解决任何问题。您可以通过Microsoft.com联系我们netfx45compat吗--Varun Gupta(来自微软.NET框架团队)今天这救了我一命。谢谢我不知道为什么,但这对我不起作用。我复制了WcfReadEntityBodyModeWorkaroundModule代码,并将模块配置添加到web.config。ReadEntityBodyMode仍然是无缓冲区的。我用的是4.5。还有别的吗?谢谢你的解决方案。这对我有用。看来这个问题现在已经解决了。
    <system.web>
        <httpModules>
            <add name="WcfReadEntityBodyModeWorkaroundModule" type="MyAssembly.WcfReadEntityBodyModeWorkaroundModule, MyAssembly" />
        </httpModules>