2009-09-03 18 views
2

私は単純なシステムを取得しようとしています。ここではフォーム認証を使ってasp.net mvc Webアプリケーションを作成し、作成したユーザーで実行しています。私はmvcコントローラ/ビューを使って問題なくログインできます。ASP.NET MVC + Silverlight +フォーム認証

次に、既存のWebアプリケーションをホストとして使用して、ソリューションにSilverlightアプリを追加しました。私は、Silverlightの対応のWebサービスを作成し、次のコードで動作契約を追加:Silverlightのアプリで

[OperationContract] 
    public bool Authenticate(string username, string password) 
    { 
     if (FormsAuthentication.Authenticate(username, password)) 
     { 
      FormsAuthentication.SetAuthCookie(username, false); 
      return true; 
     } 
     return false; 
    } 

を、私は2つのテキストボックスとボタン、およびWCFサービスへのサービス参照を追加しました。ボタンのクリックイベントでは、私はこのコードを持っている:

void login_Click(object sender, RoutedEventArgs e) 
    { 
     AuthenticationService.AuthenticationClient client = new AuthenticationClient(); 
     client.AuthenticateCompleted += new EventHandler<AuthenticateCompletedEventArgs>(client_AuthenticateCompleted); 
     client.AuthenticateAsync(username.Text, password.Text); 
    } 

    void client_AuthenticateCompleted(object sender, AuthenticateCompletedEventArgs e) 
    { 
     if (e.Result) 
     { 
      MessageBox.Show("Success"); 

     } 
     else 
     { 
      MessageBox.Show("Error"); 
     } 
    } 

だから、問題は、私は私のログイン情報を入力し、ボタンをクリックしたときに、私が得るすべてのエラー・ボックスで、です。私はそれがユーザーを認証するように見えることはできません。

何が欠けていますか?

UPDATE:ここ iは非同期完全なハンドラで取得エラーです:

ライン:86 エラー:Silverlightアプリケーションで未処理のエラー コード:4004
カテゴリー:ManagedRuntimeError
メッセージ:System.NullReferenceException : オブジェクト参照がオブジェクト インスタンスに設定されていません。 UserPortal.MainPage.client_AuthenticateCompletedで UserPortal.AuthenticationService.AuthenticationClient.OnAuthenticateCompletedで(オブジェクト送信者、AuthenticateCompletedEventArgs E) (オブジェクトの状態)

UPDATE 2: だから私は上記の投稿のエラーがe.Errorプロパティからです無効である。だから私は認証サービスからの特定のエラーを取得していません。これは、Silverlightを介して動作するようにするためにweb.configで変更する必要があるものはありますか?

<authentication mode="Forms"> 
    <!-- forms loginUrl="~/Account/LogOn" timeout="2880"/ --> 
    </authentication> 
    <membership> 
     <providers> 
      <clear/> 
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/"/> 
     </providers> 
    </membership> 
    <profile> 
     <providers> 
      <clear/> 
      <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" applicationName="/"/> 
     </providers> 
    </profile> 
    <roleManager enabled="false"> 
     <providers> 
      <clear/> 
      <add connectionStringName="ApplicationServices" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
      <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
     </providers> 
    </roleManager> 
+0

MessageBox.Show(e.ToString())またはMessageBox.Show(e.Error.ToString())を試してみるか、完全なエラーを出力してみてください。 –

答えて

0

わかりましたので、ちょっとうまくいきました。

コンテンツに続いてhere私は正常にログインできるようにサービスを稼働させることができました。問題は、RequireSSLをfalseに変更しなければならないことです。 httpsで動作するようにサービスを取得できませんでした。

誰でも、SSLで動作させるために必要なことを知っていますか?私は今ASP.NET開発サーバーを使用していますが、実際のバージョンのIISをこのボックスに設定して動作させる必要がありますか?

+0

私は多くの#ifデバッグを行いますRequireSSL = false #else RequireSSL #endifタイプのものは、ASP.Net開発サーバーの特定の欠点を回避する – thaBadDawg

0

WCFを使用して開発サーバーで実行する場合は、適切な証明書をインストールする必要があります。そのSilverlightはあなたの頂点を検証しようとするwcfクライアントプロキシではありません。 aspやブラウザからヒットしようとするとどうなりますか?