none
WCF分布式安全开发实践(10):消息安全模式之自定义用户名密问题 RRS feed

  • 问题

  • using (ClientProxy.WCFServiceClient ClientProxy = new ClientProxy.WCFServiceClient("WSHttpBinding_IWCFService"))
    
                {
    
                    string strUserName = "Frank Xu Lei ";
    
                    string strMessage = "";
    
                    //通过代理调用SayHelloToUser服务
    
                    ////正确测试密码
    
    
    
                    ClientProxy.ClientCredentials.UserName.UserName = "FrankXuLei";
    
                    ClientProxy.ClientCredentials.UserName.Password = "12345678";              
    
                    //Console.WriteLine(strMessage);
    
                    //错误测试密码
    
    
    
                    //ClientProxy.ClientCredentials.UserName.UserName = "FrankXuLei";
    
                    //ClientProxy.ClientCredentials.UserName.Password = "88888888";
    
                    //strMessage = wcfServiceProxy.HelloMessageSecurity(strUserName);
    
                    strMessage = ClientProxy.HelloMessageSecurity(strUserName);
    
                    Console.WriteLine(strMessage);
    
                }
    
                //For Debug
    
                Console.WriteLine("Press any key to continue");
    
                Console.Read();
    
    
    
    代码中的ClientProxy.ClientCredentials.UserName.UserName = "FrankXuLei";
                ClientProxy.ClientCredentials.UserName.Password = "12345678";
     在Button中触发click事件时,第一次执行没有问题,第二次就会出现“对象是只读的”错误,
    有人遇到过这个问题吗?
    第二个问题就是这种验证方式怎么在客户端判断用户登录是否成功?
    谢谢..........
    2009年9月23日 9:34

答案

  • Hi,
    1.你是在按钮点击的时候调用 服务端?这个错误你断点调试一下,看看错误时在哪里抛出的。
    2.我猜测,一个简单的方式就是,判断通道的状态,一般验证失败的话,服务不会实例化,通道状态应该有问题。
    你可以试验一下。ClientProxy应该有这个属性state。

      不要客气~
    有问题继续交流~


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年9月23日 13:15
    版主
  •        对了,想在问个问题,就是在这种验证方式下,客户端运行的时候怎样判断服务端是否开启服务?因为在这种验证下,如果调用客户端代理对象的Open方法,是需要提供认证的,如果不认证就会出错。

    服务实例激活类型 有三种:Single,perSession,perCall,
    这个实例不实例也和以上三种类型有关系。
    第一种,你及时补通过验证也是存在的。因为服务端就一个服务实例。
      后两种都是调用之前必须通过验证,才能实例化。
    否则会出错。
      常见的就是同道错误,实际这个是服务端验证失败抛出异常导致的communicationObjectFault异常。
    客户端是无法捕获。除非服务端使用错误契约,这样才可以。
      后两种模式下,基本验证失败也就等于此次针对你的这次调用不会实例化服务实例。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年9月24日 11:31
    版主

全部回复

  • Hi,
    1.你是在按钮点击的时候调用 服务端?这个错误你断点调试一下,看看错误时在哪里抛出的。
    2.我猜测,一个简单的方式就是,判断通道的状态,一般验证失败的话,服务不会实例化,通道状态应该有问题。
    你可以试验一下。ClientProxy应该有这个属性state。

      不要客气~
    有问题继续交流~


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年9月23日 13:15
    版主
  • 呵呵,谢谢,原来验证失败的时候,无法实例化服务,所以当我再次点击验证按钮时就会出现ClientProxy.ClientCredentials.UserName.UserName对象是只读的错误,只要验证失败时销毁客户端代理对象,重新创建就行了,
    想想WCF自定义用户名密码验证时的方法真是有点奇怪,不过又在情理当中啊,最近刚学,太多的地方要弄明白了,希望大家以后多多交流。
    2009年9月24日 2:15
  •        对了,想在问个问题,就是在这种验证方式下,客户端运行的时候怎样判断服务端是否开启服务?因为在这种验证下,如果调用客户端代理对象的Open方法,是需要提供认证的,如果不认证就会出错。
    2009年9月24日 3:48
  •        对了,想在问个问题,就是在这种验证方式下,客户端运行的时候怎样判断服务端是否开启服务?因为在这种验证下,如果调用客户端代理对象的Open方法,是需要提供认证的,如果不认证就会出错。

    服务实例激活类型 有三种:Single,perSession,perCall,
    这个实例不实例也和以上三种类型有关系。
    第一种,你及时补通过验证也是存在的。因为服务端就一个服务实例。
      后两种都是调用之前必须通过验证,才能实例化。
    否则会出错。
      常见的就是同道错误,实际这个是服务端验证失败抛出异常导致的communicationObjectFault异常。
    客户端是无法捕获。除非服务端使用错误契约,这样才可以。
      后两种模式下,基本验证失败也就等于此次针对你的这次调用不会实例化服务实例。

    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2009年9月24日 11:31
    版主