0

こんにちは、認証とデータベース項目の作成に問題があります。ドキュメントでは、作成前に認証を呼び出す必要があると書かれています。これが私が行ったコードです。イベントの順序が間違っているのではないかと思います。

private void ApplicationBarIconButton_Click_5(object sender, EventArgs e)
    {
        Gateway.AuthenticateAsync("username", "password1", "username2", "password2");
        Gateway.AuthenticateCompleted += new EventHandler<ServiceReference.AuthenticateCompletedEventArgs>(AuthenticateTime);    
    }

    private DateTime _nestedDateStart;
    private DateTime _nestedDateEnd;
    private DateTime _nestedDateStartBreak1;
    private DateTime _nestedDateEndBreak1;
    private DateTime _nestedDateStartBreak2;
    private DateTime _nestedDateEndBreak2;

    ServiceReference.TimereportDto Timereport = new ServiceReference.TimereportDto();

    void AuthenticateTime(object sender, ServiceReference.AuthenticateCompletedEventArgs e)
    {

        Gateway.AuthenticateAsync("username1", "password1", "username2", "password2");     

        Timereport.Started = _nestedDateStart;
        Timereport.Ended = _nestedDateEnd;

        Timereport.Break1Start = _nestedDateStartBreak1;
        Timereport.Break1End = _nestedDateEndBreak1;

        Timereport.Break2Start = _nestedDateStartBreak2;
        Timereport.Break2End = _nestedDateEndBreak2;

        Timereport.Comment = Notes.Text;
        Timereport.EmployeeSignature = "apptest";

        Gateway.CreateTimereportAsync(Timereport,"ABD");
        Gateway.CreateTimereportCompleted += new EventHandler<ServiceReference.CreateTimereportCompletedEventArgs>(CreateTimereportCompleted);

    }

    void CreateTimereportCompleted(object sender, ServiceReference.CreateTimereportCompletedEventArgs e)
    {

    }

「CreateTimereportCompleted」にブレークポイントを設定すると、以下の画像に示すようなエラーが発生します。

ここに画像の説明を入力

ご覧のとおり、「アクセスが拒否されました。最初にログインしてください」というメッセージが返されます。ユーザー名とパスワードが正しいので、コードの順序が間違っている必要があると思います。

アップデート

Gateway は、次のようなサービス参照です。

ServiceReference.GatewaySoapClient Gateway = new ServiceReference.GatewaySoapClient();

そして、認証クッキーが次のサービス呼び出しに渡されることになっているかどうかはわかりません。ドキュメントでそれを言っているものは何もありません。

Authentication の下のドキュメントに CookieContainer がありますが、それは Web ブラウザー用に作成した場合だけではありませんか?

誰でも私を助けることができますか?

4

1 に答える 1

1

方法 1:- (強制的にコードを介して Cookie を渡すことなく)

ASMX Web 構成で aspNetCompatibilityEnabled="true" を追加し、AllowCookies=false を設定します

ServiceReferences.ClientConfig に AllowCookieContainer=true を追加します

方法 2:- (コード経由で Cookie を渡す)

ASMX Web 構成で AllowCookies=true を設定します ServiceReferences.ClientConfig で AllowCookieContainer=true を追加すると、設定できます

client.CookieContainer=yourCookieContainerVariable

この「yourCookieContainerVariable」を次のサービス呼び出しに渡します。

この方法は、認証およびその他のビジネス機能用に別の URL がある場合に特に役立ちます。

に示すように: http://www.kotancode.com/2010/08/06/aspnet-authentication-wp7/

于 2013-05-21T13:03:04.833 に答える