读书人

customUserNamePasswordValidatorType

发布时间: 2012-12-17 09:31:40 作者: rapoo

customUserNamePasswordValidatorType 应该如何设定
本帖最后由 nethawkc 于 2012-01-01 22:33:12 编辑 最近在学习 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' 或其相依性的其中之一. 系统找不到指定的档案。"

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

[解决办法]
要创建一个 iis application
[解决办法]
我已知问题所在了,用IIS当WCF宿主,必须将继承UserNamePasswordValidator 的class写在另外新增的一个项目, 之后再reference这个项目产生的dll…
网络上的范例和MSDN都没提到这一点.
[解决办法]
肯定不用这样
[解决办法]
zhanghb0001 如果不用的话,能否给我一个范例 ? 我也很希望不用
我是在vs2008/vs2010 之下 档案-> 新增 -> 网站 -> WCF 服务, 所建置的项目

[解决办法]
你可以参考下这篇文章哦:http://www.cnblogs.com/viter/archive/2009/07/04/wcf_usernamepassword.html
祝你好运,喵~~
[解决办法]
Devmiao 那篇我看过, 跟网络上其它的还有MSDN说的都类似, 但都没说如果是用IIS 当宿主的话那个class 要另外建一个项目再参考.
如果像我直接使用WCF网站直接加一个class在设置customUserNamePasswordValidatorType 会一直有问题.

[解决办法]
你的assembly名字是Service吗? 你可以试换个不那么敏感的
[解决办法]
关注,同样的问题

读书人网 >Web Service

热点推荐