0

C#/.NET Google+ サインイン クイック スタート プロジェクトを使用すると、IIS6 で問題が発生します。私が従った手順は次のとおりです。

  • プロジェクトを Github からダウンロードした
  • クライアント ID とクライアント シークレットを含むように index.html ファイルと signin.ashx ファイルを変更しました
  • 私のマシンでプロジェクトを実行すると(Visual Studio 2010用の組み込みWebサーバーを使用)、正常に動作します
  • IIS6 を使用して Windows 2003 サーバーに公開
  • Web サイトのデフォルト ドキュメントとして「index.html」を追加
  • 4.0 .NET フレームワーク用に構成されたアプリ プールを使用するように Web サイトを設定する
  • Chrome からページにアクセスしようとしました

URL にページが指定されていないサイト ( https://myserver.com/gplussample/ ) にアクセスすると、Google+ サインイン ボタンが表示されます。これはうまく機能し、プロフィール写真やサークルなどを含むページに移動します.

ただし、「切断」ボタンをクリックしても何も起こりません。Chrome DevTools を使用してプロセスを調べると、次のエラーが表示されます。

POST https://myserver.com/gplussample//disconnect 404 (Not Found)

問題は//disconnect-ページ名がないことです(Visual Studio 2010を使用して開発Webサーバーでアプリを実行しているときに機能するため、signin.ashxである必要があると思います)。

次に、ページ名を指定してサイトにアクセスしようとしました。

https://myserver.com/gplussample/signin.ashx

その結果、空白のページが表示され、Chrome DevTools を見ると、.ashx ハンドラーの 400 Bad Request エラーが表示されます。.ashx ハンドラーと「不正な要求」エラーの解決策を検索して検索しましたが、この特定のケースでは成功しませんでした。

IIS6 が原因だと考えて、サイトを IIS7 インスタンスに公開しました。

URL ( ) にページ名が指定されていないためhttp://localhost/gplusoriginal/、「切断」ボタンで同じエラーが発生しました - アクションがなく、404 エラーが発生しました。

URL を に変更したところ、次のhttp://localhost/gplusoriginal/signin.ashxエラーが表示されました。

Could not create type 'GPlus_ServerSideFlow.Signin'.

再び Google に戻り、.ashx ハンドラと IIS7 の問題を確認します。web.config に関する投稿とそこでのハンドラーの指定を見つけたので、それを試してみました。

    <system.webServer>
      <handlers>
        <add name="GPlus_ServerSideFlow.Signin" path="*.ashx" verb="*"
              type="GPlus_ServerSideFlow.Signin" resourceType="Unspecified" />
      </handlers>
    </system.webServer>

このスニペットを web.config に追加すると、「タイプを作成できませんでした」というエラーは解決されましたが、別の 400 Bad Request エラーが発生しました。

私の質問は次のとおりです。このサンプル プロジェクトを機能させるには、II6 または IIS7 で何をする必要がありますか? IIS の構成で完了する必要がある追加の手順はありますか? または、プロジェクト コードに欠けているものはありますか?

ありがとうございました

4

1 に答える 1

1

サンプルが機能する方法は、RESTful エンドポイントが ashx ハンドラーによってインターセプトされることsignin.ashx.csです。ハンドラーは直接アドレス指定できないためglobal.ashx.cs、エンドポイント (/、/connect、/disconnect など) をそのルート ハンドラーにマップするようにルートがセットアップされます。

サンプルが出荷されるときは、組み込みの Web サーバーがルート ポートで実行されていることを前提としています。IIS に移行する場合は、デプロイ先の仮想ディレクトリに一致させるために、パス マッチャーを Equals からEndsWithに変更する必要があります。

        // Redirect base path to signin.
        if (context.Request.Path.EndsWith("/"))
        {
            context.Response.RedirectPermanent("signin.ashx");
        }

        // This is reached when the root document is passed. Return HTML
        // using index.html as a template.
        if (context.Request.Path.EndsWith("/signin.ashx"))
        {

これで遅れて申し訳ありません...しかし、うまくいけばそれが修正されます! この C# スターターのフォークには変更が含まれており、IIS でテストされており、この更新はまもなく公式サンプルにマージされる可能性があります。

于 2013-06-05T23:48:03.263 に答える