2012-09-12 21 views
12

VS 2012をインストールしていくつかのWebプロジェクトで正常に使用していますが、Webサービスプロジェクトが途切れる原因になりました。私はまだVS 2010をWebサービスプロジェクトで使用していて、2012年にオープンしていません。Visual Studio 2012のインストールで2010 WCFプロジェクトが破損しました

参照されているウェブログプロジェクトでクラスのインスタンスを作成しようとする場合を除いてすべてがコンパイルされて正しく動作します。エラー:

このメソッドまたはプロパティは、HttpRequest.GetBufferlessInputStreamが呼び出された後はサポートされません。

GetBufferlessInputStreamが明示的に使用されているプロジェクトのどこにも見つかりません。

私がウェブログコードを飛び越えると、すべてが正しく実行されます。

このエラーを受け取った他の誰かを見つけて絞り込むことはできません。どこから始めたらいいですか?

スタック

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 



** EDIT - ボーナス質問

なぜ4.0ソリューションに影響を与えるこれらのフレームワーク4.5のプロパティがありますか?

+0

私はそう思っていますが...ソリューションを "クリーン"にしましたか? – zapico

+1

ちょうどきれいにされ、再構築され、変更はありません。マイクロソフトの男がここに答えを持っていたが、今はなくなった。 WCFモジュールが呼び出される前にget_InputStreamを呼び出す必要があるHttpModuleを作成して、ReadEntityBodyModeプロパティをnoneの代わりにクラシックにする必要があると言いましたが、wcfより前にヒットするようにモジュールを強制する方法がわかりませんでした。 –

+0

ボーナス:あなたにこれを行うことを憎むが、http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c05a8c02-de67-47a9-b4ed-fd8b622a7e4aを参照してください。短い答え:.NET 4.5はインプレースアップグレードであり、事実上.NET 4.0のバグを修正します。 –

答えて

27

注:この問題は.NET 4.5.1で修正されています。 4.5.1で修正を見ることができます。 .net 4.5.1に次のappSettingを追加して、古い動作に戻します。ここで

<configuration>  
<appSettings> 
     <add key="wcf:serviceHostingEnvironment:useClassicReadEntityBodyMode" value="true" /> 
</appSettings> 
</configuration> 

は、あなたが「古典的」であることをReadEntityBodyModeを強制するHttpModuleを作成する方法である:(?これらのフレームワーク4.5のプロパティは私の4.0ソリューションをもたらすされているのはなぜ)http://blogs.msdn.com/b/praburaj/archive/2012/09/13/accessing-httpcontext-current-request-inputstream-property-in-aspnetcompatibility-mode-throws-exception-this-method-or-property-is-not-supported-after-httprequest-getbufferlessinputstream-has-been-invoked.aspx

はあなたの他の質問に答えるために: .net 4.5は.net 4.0のインプレースアップグレードです。したがって、プロジェクトが4.0をターゲットにしている場合でも、VS 2012で4.5のランタイムがインストールされてから、4.5の動作の一部が有効になります。

EDIT

ブログエントリは:.NET 4.5 WCFでは

は、スケーラビリティの利益のためのバッファ以下の入力ストリームを活用しました。その結果、HttpContext.Current.Request.InputStreamプロパティにアクセスしようとすると、InputStreamプロパティが両方とも互換性がないため、Classicストリームを処理しようとするため、以下の例外が発生する可能性があります。

“This method or property is not supported after HttpRequest.GetBufferlessInputStream has been invoked.”

完全に機能していたWCF 4.0アプリケーションを持っていても、.netフレームワークを4にアップグレードした場合。5あなたは、このプロパティにアクセスするには失敗したサービスに気づく、ここで働い-周りべき問題な方法は次のとおりです。

  • WCFを読む前に各要求を行うためのInputStreamプロパティにアクセスするのと同じWCFプロジェクトでの単純なHttpModuleを追加HttpContext.Request.ReadEntityBodyを "Classic"にして互換性を確保するようにします。

    public class WcfReadEntityBodyModeWorkaroundModule : IHttpModule  
    {  
        public void Dispose() { } 
    
        public void Init(HttpApplication context) {  
         context.BeginRequest += context_BeginRequest;  
        }  
    
        void context_BeginRequest(object sender, EventArgs e) { 
         //This will force the HttpContext.Request.ReadEntityBody to be "Classic" and will ensure compatibility..  
         Stream stream = (sender as HttpApplication).Request.InputStream;  
        }  
    } 
    
  • <configuration><modules>設定でこれらの行を追加することで、あなたの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に登録することができます。

ここで成功するサービスにアクセスしてみてください。

+4

これは今日、私のお尻を保存しました。ありがとう! –

+0

私のお尻#2を保存しました – Paden

+1

なぜ、私は考えていませんが、これは私のために働いていません。私はWcfReadEntityBodyModeWorkaroundModuleコードをコピーし、web.configにモジュール設定を追加しました。 ReadEntityBodyModeはまだバッファレスです。私は4.5を使用しています。それに何か他に何かありますか? – bsayegh

関連する問題