有效的使用WSE(学习+实践)
学习网上好多的贴子例如:RicCC,采用证书方式,大约2天时间未果,后请教队长,学到了一个简单而有交的方式。
1、服务器端:
1)新建WebService;
2)添加MyUsernameTokenManager,MySoapHeader
4)设置WES属性 General 页中两项全选
Security页中添加 SecurityTokensManagers
Type 修改如下 MyUsernameTokenManager(类名), App_Code(程序集名)
5) Policy页选中 Enable Policy,添加ServerSidePolicy:Secure a service application \ Username;PerformAuthorization 不选;EnableWS-Security1。1 Extensions, ProtectionOrder 选None(rely on transport protection);完成即可。
2、客户端:
1)新加客户端。
2)设置WSE 3。0:General页选中第一项;Policy页选中Enable Policy,添加EditApplicatioPolicy:ClientSidePolicy,Secure a client application ,username;SpecifyUsername Token in code;EnableWS-Sercurity1。1 Extensions ,ProtectionOrder:None;完成即可。
3)引用WebService。
4)
写的真乱,自己都看不懂,没时间,先这样吧,想起来了再详细修改修改。
向 RicCC (虽然按照他的例子我也没做成功),向Teamleader学习。
谦虚使用进步。
1、服务器端:
1)新建WebService;
2)添加MyUsernameTokenManager,MySoapHeader
MySoapHeader
public class MyUsernameTokenManager : UsernameTokenManager
{
public MyUsernameTokenManager()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 对WebService调用过程中传递的UsernameToken进行验证
/// </summary>
/// <param name="token">UsernameToken</param>
/// <returns>此UsernameToken所标识用户的真实密码</returns>
protected override string AuthenticateToken(UsernameToken token)
{
if (token == null)
{
throw new ArgumentNullException();
}
switch(token.Username)
{
case "WseClientUseradmin":
{
return "EDFxfkY12sn6Oh52wGuR9g==admin";
}
case "WseClientUserclient":
{
return "EDFxfkY12sn6Oh52wGuR9g=client";
}
default:
{
return "EDFxfkY12sn6Oh52wGuR9g==admin";
}
}
}
}
3) 设置WebService属性 [Policy("ServerSidePolicy")] {
public MyUsernameTokenManager()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 对WebService调用过程中传递的UsernameToken进行验证
/// </summary>
/// <param name="token">UsernameToken</param>
/// <returns>此UsernameToken所标识用户的真实密码</returns>
protected override string AuthenticateToken(UsernameToken token)
{
if (token == null)
{
throw new ArgumentNullException();
}
switch(token.Username)
{
case "WseClientUseradmin":
{
return "EDFxfkY12sn6Oh52wGuR9g==admin";
}
case "WseClientUserclient":
{
return "EDFxfkY12sn6Oh52wGuR9g=client";
}
default:
{
return "EDFxfkY12sn6Oh52wGuR9g==admin";
}
}
}
}
4)设置WES属性 General 页中两项全选
Security页中添加 SecurityTokensManagers
Type 修改如下 MyUsernameTokenManager(类名), App_Code(程序集名)
5) Policy页选中 Enable Policy,添加ServerSidePolicy:Secure a service application \ Username;PerformAuthorization 不选;EnableWS-Security1。1 Extensions, ProtectionOrder 选None(rely on transport protection);完成即可。
2、客户端:
1)新加客户端。
2)设置WSE 3。0:General页选中第一项;Policy页选中Enable Policy,添加EditApplicatioPolicy:ClientSidePolicy,Secure a client application ,username;SpecifyUsername Token in code;EnableWS-Sercurity1。1 Extensions ,ProtectionOrder:None;完成即可。
3)引用WebService。
4)
localhost.ServiceWse svc = new localhost.ServiceWse();
string username = "用户名";
string password = "密码";
UsernameToken token = new UsernameToken(username, password);
svc.SetClientCredential<UsernameToken>(token);
svc.SetPolicy("ClientSidePolicy");
MessageBox.Show(svc.HelloWorld());
string username = "用户名";
string password = "密码";
UsernameToken token = new UsernameToken(username, password);
svc.SetClientCredential<UsernameToken>(token);
svc.SetPolicy("ClientSidePolicy");
MessageBox.Show(svc.HelloWorld());
写的真乱,自己都看不懂,没时间,先这样吧,想起来了再详细修改修改。
向 RicCC (虽然按照他的例子我也没做成功),向Teamleader学习。
谦虚使用进步。