フォーム認証を使用している MVC 3 Web サイトがあります。ユーザーがログインし、Silverlight 5 アプリケーションに移動します。Silverlight アプリは、別のポートで Silverlight 対応の WCF サービスを呼び出しています。私の要件の 1 つは Https/SSL を使用することであるため、WCF サービスを MVC アプリケーションの "Services" フォルダーに移動することにしました。
サービスが機能しているかどうかを確認するために、サービスのアドレスを入力しました。サービスには匿名アクセスが必要であるというエラー メッセージが表示されましたが、Web サイトはフォーム認証を使用するように指定されています。そのため、サービスの web.config で mexHttpBinding を削除し、バインディングの httpTransport に authenticationScheme="Negotiate" を追加しました。(私はまだ https にしていません)。
ここで、302 を受け取り、ログイン ページにリダイレクトされます。私のサービスは、私がログインしていないことを示唆しているようです。だから、私は追加しました
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
と
routes.IgnoreRoute("Services/");
しかし、それは違いをもたらしていません。サービスは私が認証されていないと言っていると思いますが、認証されていることは確かです。
誰かが私が間違っていることを説明できますか?
ローカルホストでデバッグするとすべてが機能しますが、サーバーにデプロイするとサービスにアクセスできません。
編集
私は私の答えを見つけたかもしれません。IIS で Web サイトの匿名アクセスを有効にし、httpTransport の authenticationScheme をデフォルト (匿名) に変更しました。次に追加しました
<authorization>
<deny users="?"/>
</authorization>
一緒に
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
これは、サービスにアクセスするためにユーザーを認証する必要があるようです。次に、Silverlight アプリケーションをチェックして、サービスに到達し、データを取得/送信できることを確認します。これはすべてテスト アプリケーションにあったため、それに応じて実際のアプリケーションを変更する必要があります。次に、ssl/https に取り組みます。
これはすべて正しく聞こえますか?
編集2
Silverlight アプリでコントラクトを更新するには、mex が有効になっており、aspNetCompatibilityEnabled が「false」に設定されていることを確認する必要がありました。しかし、サービスを更新した後、aspNetCompatibilityEnabled を「true」に設定すると、すべてが機能しているように見えます。
私はまだ正しい道を進んでいることを願っています...