1

フォーム認証を使用している 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」に設定すると、すべてが機能しているように見えます。

私はまだ正しい道を進んでいることを願っています...

4

1 に答える 1

1

親 Web サイトの下に Web サービスを Web サイトとして追加するように IIS を設定することになりました。次に、親サイトの web.config で Location タグを使用して、Web サービスにフォーム認証を実装しました。

于 2012-07-19T22:21:42.917 に答える