【问题标题】:authentication before creation of database item创建数据库项之前的身份验证
【发布时间】:2013-05-14 16:26:12
【问题描述】:

您好,我遇到了一些身份验证和创建数据库项目的问题。 在文档中,它说应该在创建之前调用身份验证。所以这是我完成的代码,我想知道我的事件顺序是否错误。

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”上设置断点时,出现如下图所示的错误:

如您所见,它返回消息“访问被拒绝,请先登录”。所以因为用户名和密码是正确的,所以我认为我的代码一定是错误的顺序。

更新

网关是一个如下所示的服务引用:

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

如果身份验证 cookie 应该传递给下一个服务调用,我不知道。文档中没有这样说。

他们在 Authentication 下面的文档中有一个 CookieContainer,但不是只有当你为 webbrowser 制作它时?

谁能帮帮我?

【问题讨论】:

  • 能否请您扩展问题以包括.. GateWay 对象是什么,它与传递给下一个服务调用的身份验证 cookie 有关吗?
  • 已经更新了我的问题,希望它能给混乱带来更多意义
  • GatewayAuthenticateAsync 是您的 WCF 调用,它是否与 WCF 默认身份验证服务或您自己的实现相关联?或者尝试在您的 wcf 代码中为 CreateTimereportAsync 调用此 Authenticate 并查看调用成功后尝试从数据库中获取数据。(在 WCF CreateTimereport 方法中的数据库检索之前调用 Authenticate 只是为了检查它是否以这种方式运行
  • 这是我自己的实现。如您所见,我试图在我的 CreateTimereportAsync 中调用 Authenticate。或者真的我刚刚将 gateway.authenticationasync 添加到“AuthenticateTime” void 中,正如你所看到的那样。我应该如何尝试使用authenticateasync 你的意思是?
  • 我的意思是在 wcf 方法中......而不是在你的 windows phone 方法中......(你可能必须将用户名和密码传递给 wcf 函数)。我只是想将焦点移到 wcf 中,以检查这是否真的与传递的身份验证令牌有关

标签: c# wcf windows-phone-7 service-reference


【解决方案1】:

方法 1:-(不通过代码强制传递 cookie)

在您的 ASMX 网络配置中 添加 aspNetCompatibilityEnabled="true" 并设置 AllowCookies=false

在您的 ServiceReferences.ClientConfig 添加 AllowCookieContainer=true

方法2:-(通过代码传递cookie)

在您的 ASMX 网络配置中设置 AllowCookies=true 在您的 ServiceReferences.ClientConfig 添加 AllowCookieContainer=true 你可以设置

client.CookieContainer=yourCookieContainerVariable

并将这个“yourCookieContainerVariable”传递给下一个服务调用。

当您有单独的 url 用于身份验证和其他业务功能时,此方法特别有用

如图所示:http://www.kotancode.com/2010/08/06/aspnet-authentication-wp7/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多