3

私は.NET 4.0 VS10を使用していました。フォーム認証を使用する WCF サービスが動作していました。VS11、.NET 4.5にアップグレードしました。

今私の HttpContext.Current.User は、wcf リクエストで null です。ログインからこのリクエストに Cookie を挿入しました。

HttpRequestMessageProperty httpRequest;
...
httpRequest.Headers.Add(HttpRequestHeader.Cookie, cookie);

それを再び機能させる方法はありますか?

すでに持っている

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

そしてその

[AspNetCompatibilityRequirements(RequirementsMode = spNetCompatibilityRequirementsMode.Required)]
4

2 に答える 2

2

Oneway ( [OperationContract(IsOneWay=true)]でマークされた操作) WCF 操作コントラクトでこの問題が発生している場合、問題の理由は次のとおりです。HttpContext は asp.net コンストラクトです。一方向操作が正常に呼び出された後、サービス モデルは 202 (Accepted) 応答をクライアントに返します。

  • 4.5 では、asp.net は HttpContext をクリアします。これは、設計による応答が既にクライアントに送り返されているためです。
  • 4.0 では、このサポートされていないシナリオが機能したのは単なる偶然です。

これに関する顧客レポートがいくつか見つかったため、.net 4.5.1 アップデートで奇妙な修正が行われました。修正の詳細を提供するには:

  1. プロジェクトがまだ 4.0 をターゲットとしていて、アプリケーションを 4.5.1 マシンで実行している場合、問題は修正されます (ターゲット フレームワークのバージョンを内部的にチェックします)。
  2. プロジェクトが 4.5 に再ターゲットされると、上記の理由により、Httpcontext.Current.User は再び null になります。HttpContext.Current.User プロパティの代わりに、OperationContext.Current.ServiceSecurityContext.WindowsIdentity を使用してユーザー ID を取得してみてください。このプロパティはホストに依存せず、クライアントが認証されると設定されます。
于 2013-08-27T17:36:17.477 に答える
0

ここに同様の問題の解決策があります:

追加

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

設定ファイルに。

于 2013-03-11T10:28:52.303 に答える