問題タブ [httpcontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - Rhino モックを使用して HttpContext.Application をモックする方法
私はモッキング フレームワークを初めて使用し、RhinoMocks を使用して MVC アプリ ユニット テストを支援し始めました。
Scott Hanselmann の MVC Mock Helperを使用して、HttpContext のモックを作成しています。私は(しばらくしてから)必要なもののいくつかをうまくモックしましたが、HttpContextのApplicationプロパティに関しては行き詰まりました。
私のアプリケーションでは、オブジェクトをアプリケーションに保存し、次のようにコントローラー内で取得します。
これは、MVC アプリの Application_Start で作成されます。
UPDATED FOLLOWING FOLLOWING FIRST ANSWER (明確にするための追加コード) 現在、テストセットアップで次のことを行っています。
私の単体テストのセットアップでは、次のことを行います。
この呼び出しは、Application オブジェクトに対して NullReference 例外をスローします。
私の質問は 2 つあります。
1)これは正しいアプローチですか、それとも設計/アーキテクチャの観点から何か間違ったことをしましたか?
2) なぜこれが機能しないのですか?!
前もって感謝します。
asp.net - httpcontext.items を使用せずにスレッド間でオブジェクトを永続化するにはどうすればよいですか?
データ アクセス レイヤー (DAL) のメモリ内キャッシュを処理するオブジェクトがあり、それをスレッド間で永続化する必要があります。私が読んだことから、好ましい方法は httpcontext.item を次のようなコードで使用することです:
2 つの質問: これはオブジェクトをシリアル化しようとしていますか?もしそうなら、どうすればオブジェクトをそのままにして、シリアル化する代わりにメモリ内で参照することができますか? オブジェクトは内部で DB 接続とキャッシュを処理するため、オブジェクトをそのままにしておく必要があります。
[編集]
これを実行すると、ページがハングするエラーが発生します。イベント ログには 2 つの項目があります。
障害のあるアプリケーション w3wp.exe、バージョン 7.0.6001.18000、タイム スタンプ 0x47919ed8、障害モジュール kernel32.dll、バージョン 6.0.6001.18000、タイム スタンプ 0x4791ada5、例外コード 0xe053534f、障害オフセット 0x00000000002649d、プロセス ID 0x%9%0x10、アプリケーション開始時間.
と
状態サーバーは期限切れの TCP/IP 接続を閉じました。クライアントの IP アドレスは 127.0.0.1 です。期限切れの読み取り操作は、2009 年 4 月 7 日 20:44:29 に開始されました。
次に、コードを再ハッシュして、アイテムをセッション ID に対してディクショナリ オブジェクトに配置したところ、これらのエラーが発生しました。静的変数を使用すると問題なく動作しますが、ユーザーが他のユーザーのデータにアクセスするという元の問題があります (明らかにそれはオプションではありません)。
再ハッシュされたバージョンは次のとおりです: (これは最初の方法では機能しますが、この方法では機能しません)
[編集]
同じセッションで複数の Web リクエストがある場合のロックの良い点。httpcontext.item アプローチを使用することになり、プロパティが byref ではなく byval であることに問題があることがわかりました。参照によってオブジェクトを処理するメソッドを含めるようにコードを変更したところ、これが機能するようになりました。
asp.net - スレッド間でのHTTPContextの使用
ユーザーがページspawn.aspxにアクセスすると、半ダースのスレッドが生成され、すべてのページが
ASP.Netがユーザーに1つの要求に対して7つの応答を送信しているように見え、その部分が処理され、1つの応答のみが送信されるという事実について心配する必要はありません。
問題は、多くのスレッド(クワッドクワッド)があるトラフィックの多い環境(本番環境)では、エラーが発生することです。
他の場所で複製することはできません。私の同僚は、これは元のHTTPContextを再利用して他のスレッドに渡しているためであり、スレッドセーフではないと考えています。
このロジックに従って、スレッドに渡す新しいHTTPContextを作成してみました。しかし、その一部は「結合」しないようです。具体的には、Sessionオブジェクトを新しいHTTPContextに取り込む必要があります。キャッシュのような他の部分も入れたいと思います。レコードの場合、HTTPContext.Current.Session.IsSynchronizedはfalseです。
私の質問は次のとおりです。
- エラーはスレッド間でHTTPContextを使用したことによるものだと思いますか?
- どうすれば修正できますか?
- 修正によって各スレッドのHTTPContextが複製されている場合、セッション(およびキャッシュ)を新しいスレッドに取り込むにはどうすればよいですか?リクエストとレスポンスはコンストラクターで行われますが、セッションは設定できません。
編集:詳細
したがって、このステートメントに戻ります。「ASP.Netがユーザーに1つの要求に対して7つの応答を送信しているように見え、その部分が処理され、1つの応答のみが送信されるという事実について心配する必要はありません。」レイモンド・チェンの大ファン、私はあなたに同意します:「今あなたは2つの問題を抱えています」はこれ以上の情報がない場合の合理的な声明です。
実際に起こっているのは、返送するExcelドキュメントを作成しているということです。spawn.aspxページでは、Excelにレンダリングしているという事実や、レンダリングを実行するオブジェクトなど、いくつかの状態情報を設定しています。生成された各ページはその情報を取得し、オブジェクトにレンダリングする順番になるまでブロックします。文字通りこのように見える場合:
しかし、それまでのすべての処理-データベースアクセス、制御階層、すべてが並行して実行されます。そして、それはたくさんあります-それでもRenderでブロックさせながらそれを並列化すると、全体の時間が半分以上に短縮されます。
そして、その最良の部分は、Excelレンダリングのために何も書き直す必要がなかったことです。すべてのコントロールは、Excelをレンダリングする方法を知っており、生成された各ページに個別にアクセスできます(これは、実際には「通常のケース」です。Excelレポートは、生成されたすべてのページの単なる集約です)。
したがって、最終結果は「これはできません。アプローチを再考する必要があります」になると思いましたが、ロジックやコードを複製することなくすべてがうまく機能するという事実から、少なくとも試してみる必要がありました。何かを抽象化する必要があるのはとても完璧です。そして、問題となるのはマルチスレッドだけです。ページをシリアルにレンダリングすると、すべてが正常になり、遅くなります。
c# - フリーサイズのコンテキストベースのストレージを求める
まず、コンテキストベースのストレージがフレームワーク全体で一貫していることを望みます!
そうは言っても、ASP.NET、WCF、およびその他のマルチスレッド .NET コード全体でこれらのプロパティを安全にするための洗練されたソリューションを探しています。プロパティは、いくつかの低レベルのトレース ヘルパーにあります (なぜ内部にあるのか疑問に思っている場合、これらはメソッドを介して公開されます)。
不要なアセンブリ (System.Web など) に依存したくない。このコードを使用して何かを構成する必要はありません。私はそれを機能させたいだけです;)それは注文が高すぎるかもしれません...
何か裏技を持っている人はいますか?(Springの実装を見てきました)
アップデート
安全とは、同期を意味するものではありません。問題の背景はこちら
asp.net - Web.HttpContext.Current.User.Identity.Name はどこから来たのですか?
私は持っている
カスタム ログイン シーケンスの一部として。後で、特定の役割のみを許可するページがあります。
私の知る限り、これはロール プロバイダーの GetRolesForUser の実装を呼び出します。ユーザー名パラメーターを Web.HttpContext.Current.User.Identity.Name から取得しているようです。
私の質問は....認証Cookieのユーザー名が現在のユーザーIDの名前として設定されるのはいつですか?
string - Silverlight で HtmlDecode と HtmlEncode を実行できますか?
System.Web
&は Silverlight では使用できないため、恐ろしい正規表現を使用せずに&を Silverlight アプリ内でHttpContext
実行する方法はありますか?HtmlDecode
HtmlEncode
asp.net - ASP.NET: Request.Form が遅い!
Request.Formで非常に奇妙な動作をしています。
これは、同じ ASP.NET アプリケーションを実行している 2 つの IIS 7 サーバーです。最初の例では、すべて問題ありません。しかし、2番目のものはパフォーマンスが非常に遅いです。
プロファイラーは、次の行を示しました。
毎回130ミリ秒以上かかります!
プロファイラー ログ:
0,60% get_Form - 4536 ミリ秒 - 68 回の呼び出し - System.Web.HttpRequest.get_Form()
サーバー構成はまったく同じです(?)。最初のサーバーは Vista を実行し、2 番目の (遅い) サーバーは Windows Web Server 2008 を実行します。
UPD: 両方のアプリケーション インスタンスが統合モードで実行されており、プール設定は同じです。
何か案は?
asp.net-mvc - ASP.NET MVC: HTTPContext と依存関係の挿入
現在、HttpContext から現在のユーザー名を取得し、それをサービス メソッドで使用するアクションに渡す ActionFilter があります。例えば:
アクション レベルではなく、コントローラー コンストラクター レベルでこれを行う理由ができました。現在、構造マップを使用してコントローラーを作成し、サービスを注入しています。私は次のようなものを見ています:
とはいえ、これは私が使用した最初のプロジェクトであるため、私の IoC foo は非常に弱いです。
だから私の質問は...構造マップにHttpContextUserProviderのコンストラクターでHttpContextを渡すように指示するにはどうすればよいですか? これは奇妙に思えます... HttpContextの考え方がわかりません。
c# - HttpContextを介してファイルを送信すると、ブラウザがハングします
HttpHandlerを使用してユーザーにファイルを送信しています。すべてのブラウザで、ファイルを少なくとも1回表示/ダウンロードした後、後続の表示/ダウンロードのブラウザ/アプリケーションがハングします。コードは次のとおりです。
Response.Close()とResponse.End()を呼び出すのは良い考えではないことを読みましたか?残すことと取り除くことの両方を試みました、そしてそれはまだ起こります。
編集:
TransmitFileには既知の問題があるようです。より詳細な説明は次の場所にあります:http: //www.improve.dk/blog/2008/03/29/response-transmitfile-close-will-kill-your-application
TransmitFileを削除してWriteFileに変更したところ、完全に機能するようになりました。