none
customUserNamePasswordValidatorType 应该如何设定? RRS feed

  • 问题

  • 最近在学习 WCF 用户密码验证﹐但是在设定customUserNamePasswordValidatorType 时却一直有问题。

    我新增一个WCF的新网站﹐不做任何修改﹐只是在Service.cs 加上一段继承UserNamePasswordValidator class

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.Text;
    using System.IdentityModel;
    using System.IdentityModel.Tokens;
    using System.IdentityModel.Selectors;
    
    public class Service : IService {
        public string GetData(int value) {
            return string.Format("You entered: {0}", value);
        }
    
        public CompositeType GetDataUsingDataContract(CompositeType composite) {
            if (composite == null) {
                throw new ArgumentNullException("composite");
            }
            if (composite.BoolValue) {
                composite.StringValue += "Suffix";
            }
            return composite;
        }
    
        public class MyUserValidator : UserNamePasswordValidator {
            public override void Validate(string userName, string password) {
                if (null == userName || null == password) {
                    throw new ArgumentNullException();
                }
    
                if (!(userName == "test1" && password == "1tset") && !(userName == "test2" && password == "2tset")) {
                    throw new FaultException("Unknown Username or Incorrect Password");
                }
            }
        }
    }
    

    然后修改web.config﹐但在customUserNamePasswordValidatorType这里搞不定

        <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
              <serviceCredentials>
                <clientCertificate>
                  <authentication certificateValidationMode="None" />
                </clientCertificate>
                <serviceCertificate findValue="HTTPS-Server" x509FindType="FindBySubjectName" />
                <userNameAuthentication userNamePasswordValidationMode="Custom"
                  customUserNamePasswordValidatorType="Service.MyUserValidator,Service" />
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    

    customUserNamePasswordValidatorType這個的格式是"命名空間.方法, 命名空間"﹐但我上述的設定後以IE執行http://localhost/WCFService/Service.svc﹐就出現 "無法載入檔案或組件 'Service' 或其相依性的其中之一。 系統找不到指定的檔案。"

    我試著自行在程式上加入namespace

    namespace WCFWebHost {
        public class Service : IService {
              ...........
              ...........
        }
    }
    

    customUserNamePasswordValidatorType="WCFWebHost.Service.MyUserValidator , WCFWebHost" 设定成这样﹐但仍然是得到同样的错误讯息"无法加载档案或组件 'Service' 或其相依性的其中之一。 系统找不到指定的档案。"

    请问这个到底该如何设定呢?

    2012年1月2日 1:56

答案