(注:私は最終的にこれを自分で解決し、なりすましは主な問題ではないことが判明しました。ただし、なりすましが発生する理由を誰かが知っている場合は、お知らせください。)
Silverlight アプリケーションから呼び出されている WCF サービスがあります (これらは同じ Web アプリケーションによってホストされています)。サービスの呼び出しは、操作自体にかかる時間に比べて驚くほど遅いです。WCF トレース ログを見ると、偽装に 2 秒以上かかっているように見えます (5 行目を参照)。
[15:32:3.193] From: Processing message 1.
[15:32:3.193] Activity boundary.
[15:32:3.193] Received a message over a channel.
[15:32:3.194] ServiceChannel information.
[15:32:5.539] Security Impersonation succeeded at the server.
[15:32:5.540] To: Execute 'MyNamespace.GetFloorplan'.
[15:32:5.540] Activity boundary.
[15:32:6.302] From: Execute 'MyNamespace.GetFloorplan'.
[15:32:6.302] Activity boundary.
[15:32:6.305] Sent a message over a channel.
[15:32:6.306] Activity boundary.
偽装は、構成で明示的に有効にする (またはコードからトリガーする) 必要があると思っていたので、これは私を困惑させます。私はコンサルタントとしてこのプロジェクトに参加したばかりなので、ソース コード全体の概要をまだ把握していませんが、「なりすまし」または「なりすまし」というテキストはソース コードのどこにも存在しません。混乱に加えてSystem.Threading.Thread.CurrentPrincipal.Identity
、サービス内から名前のない認証されていない ID が返され、 がSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
返さIIS APPPOOL\MyCustomAppPool
れるため、なりすましは実際には何も達成していないようです。
フォーム認証と ASP.NET 互換モードを使用します。後者を無効にすると (私がまだ知らないそれに依存する機能がある可能性があるため、永続的に実行できるかどうかはわかりません)、Security Impersonation succeeded at the server
ログから消えますが、 と の時間差はまだほとんどありませReceived a message over a channel.
んTo: Execute 'MyNamespace.GetFloorplan'.
二秒。操作に追加[OperationBehavior(Impersonation = ImpersonationOption.NotAllowed)]
しても役に立ちません。
誰かがここで何が起こっているのか理解していますか? (私の目標は、なりすましや、余分な 2 秒を占めるものを取り除くことです。)
サービス クラスには次の属性があります (理想的にはインターフェイスに配置する必要があることはわかっていますが、最初にサービスに配置された理由があるかどうかはまだわかっていません)。
[ServiceContract(Namespace = "")]
[SilverlightFaultBehavior]
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
サービス構成は次のとおりです。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="SilverlightServiceBinding">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>
<services>
<service name="MyNamespace.FloorplanService">
<endpoint address="" binding="customBinding"
bindingConfiguration="SilverlightServiceBinding"
contract="MyNamespace.FloorplanService" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
クライアント構成:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_FloorplanService"
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="../Floorplan/FloorplanService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_FloorplanService"
contract="FloorplanServiceProxy.FloorplanService"
name="BasicHttpBinding_FloorplanService" />
</client>
</system.serviceModel>