使用注意:
建立demo数据库,使用aspnet_regsql.exe建立Memmbership
一些安全场景需要证书,使用CertTool的工具生成
具体的授权时的角色和用户名字参考HostSvc、Client代码修改成测试用的后才能正常运行
一、目录结构
Common来自于Programming WCF Services[ISBN: 978-0-596-80548-7],实现WCF的声明式安全
HostSvc:不同场景的接口和服务实现,命令行承载服务
MembershipAdmin:用于操作demo数据库membership的成员操作,Asp.net Configuraion 可添加角色和用户,并使用IIS服务承载HostSvc实现的服务
Client: 使用各种服务的客户端场景
二、四种场景的区别:
Intranet
Transport保护
使用tcp绑定
windows集成的安全
Internet
只能使用Message形式的保护,需要数字证书
tcp wsHttp绑定
使用Membership进行安全认证
Anoymous
使用Message形式的保护,需要数字证书
tcp wsHttp绑定
None
消息不保护
http tcp wsHttp绑定
三、App-comment.config: 包含对于各种配置的说明
四、证书的生成:
CertTool\SetupCerts.bat生成,命令行工具从VS SDK已经拷贝过来
五、IIS中承载服务的注意:
需要把WCFServer赋予IIS的账号以权限
受信任人中加入WCFServer证书
六、证书如何管理:
1、命令行启动mmc
2、“添加、删除管理单元”加入”证书”, 按照提示选择当前用户或本机
3、此时即可管理
IIS的权限操作:
在”个人/证书”下找到WCFServer,”更多操作/所有任务/管理私钥”,弹出界面设置用户权限
受信任人:
在”个人/证书”下找到WCFServer,导出证书,然后在”受信息人/证书“下导入以上证书即可
七、远程机器客户端的证书问题
导出WCFServer【不要私钥】
然后在远程客户端机器上导入即可,此时的公钥可以用于消息的验证
八、IIS中承载
MembershipAdmin中加入了对应的四个.svc文件【逻辑使用的一个HostSvc中的实现】以提供WCF服务,
具体配置和HostSvc一致,当然地址不一样了
此例是把MembershipAdmin作为应程序发布到80端口的demo下
注意:
1、需要设置IIS的http和net.tcp协议支持
2、数据库demo需要能被IIS账号访问
3、WCFServer证书需要能被IIS账号访问
static void Main(string[] args)
{
#region Intranet下的Membership验证
ServiceHost net = new ServiceHost(typeof(IntranetMember));
net.Open();
Console.WriteLine("None Service OK, 回车继续");
Console.ReadLine();
///MembershipAdmin的Asp.net Configuration界面界面中加入demo用户,admins角色[membership的内容]
ClientCredentials usr = new ClientCredentials();
usr.UserName.UserName = "demo";
usr.UserName.Password = "demo";
WcfPrxoy<IIntranetMember> ww = new WcfPrxoy<IIntranetMember>("IntranetMember");
ww.SecureProxy(usr.UserName.UserName, usr.UserName.Password);
var ei = ww.Endpoint.Address.Identity;
//ww.Svc.Demo();
WcfPrxoy<IIntranetMember> ww1 = new WcfPrxoy<IIntranetMember>("IntranetMember", "net.tcp://localhost:87");
ww1.SecureProxy(usr.UserName.UserName, usr.UserName.Password);
var ei1 = ww1.Endpoint.Address.Identity;
ww1.Svc.Demo();
using (WcfClient<IIntranetMember> cweb = new WcfClient<IIntranetMember>(usr.UserName, "IntranetMember"))
{
cweb.Svc.Demo();
}
net.Close();
#endregion
ServiceHost none = new ServiceHost(typeof(None));
none.Open();
Console.WriteLine("None Service OK, 回车继续");
Console.ReadLine();
///处理异常的演示,实际中这样使用以统一处理异常问题
string data = "scope";
Helpers.Action(() => {
Console.WriteLine(data);
using (WcfClient<INone> cno = new WcfClient<INone>(ServiceSecurity.None, "None.tcp"))
{
cno.Svc.Demo();
}
});
bool success = Helpers.Func(()=>
{
Console.WriteLine(data);
using (WcfClient<INone> cno = new WcfClient<INone>(ServiceSecurity.None, "None.tcp"))
{
cno.Svc.Demo();
}
});
Console.WriteLine("{0}", success);
none.Close();
//各种场景运行演示
DemoRun();
}
private static void DemoRun()
{
ServiceHost net = new ServiceHost(typeof(Intranet));
net.Open();
Console.WriteLine("Intranet Service OK, 回车继续");
Console.ReadLine();
//所有客户端使用配置形式加载各种设置项,如Intranet等,在app.config的<client>节
//默认使用当前机器的账号
using (WcfClient<IIntranet> cnet = new WcfClient<IIntranet>(ServiceSecurity.Intranet, "Intranet"))
{
cnet.Svc.Demo();
cnet.Svc.Demo2();
}
//显式指定账号
using (WcfClient<IIntranet> cnet = new WcfClient<IIntranet>("wu", "Administrator", "wsf", "Intranet"))
{
cnet.Svc.Demo();
cnet.Svc.Demo2();
}
Console.WriteLine();
ServiceHost none = new ServiceHost(typeof(None));
none.Open();
Console.WriteLine("None Service OK, 回车继续");
Console.ReadLine();
using (WcfClient<INone> cno = new WcfClient<INone>(ServiceSecurity.None, "None.tcp"))
{
cno.Svc.Demo();
}
using (WcfClient<INone> cno = new WcfClient<INone>(ServiceSecurity.None, "None.ws"))
{
cno.Svc.Demo();
}
using (WcfClient<INone> cno = new WcfClient<INone>(ServiceSecurity.None, "None.http"))
{
cno.Svc.Demo();
}
Console.WriteLine();
ServiceHost anoy = new ServiceHost(typeof(Anoymous));
anoy.Open();
Console.WriteLine("Anoymous Service OK, 回车继续");
Console.ReadLine();
using (WcfClient<IAnoymous> canoy = new WcfClient<IAnoymous>(ServiceSecurity.Anonymous, "Anoymous.tcp"))
{
canoy.Svc.Demo();
}
using (WcfClient<IAnoymous> canoy = new WcfClient<IAnoymous>(ServiceSecurity.Anonymous, "Anoymous.ws"))
{
canoy.Svc.Demo();
}
Console.WriteLine();
ServiceHost web = new ServiceHost(typeof(Internet));
web.Open();
Console.WriteLine("Internet Service OK, 回车继续");
Console.ReadLine();
ClientCredentials usr = new ClientCredentials();
usr.UserName.UserName = "demo";
usr.UserName.Password = "demo";
using (WcfClient<IInternet> cweb = new WcfClient<IInternet>(usr.UserName, "Internet.tcp"))
{
cweb.Svc.Demo();
}
using (WcfClient<IInternet> cweb = new WcfClient<IInternet>(usr.UserName, "Internet.ws"))
{
cweb.Svc.Demo();
}
}
资源文件列表
ProgWCF/Backup/MembershipAdmin/About.aspx , 448
ProgWCF/Backup/MembershipAdmin/About.aspx.cs , 309
ProgWCF/Backup/MembershipAdmin/About.aspx.designer.cs , 444
ProgWCF/Backup/MembershipAdmin/Account/ChangePassword.aspx , 4484
ProgWCF/Backup/MembershipAdmin/Account/ChangePassword.aspx.cs , 326
ProgWCF/Backup/MembershipAdmin/Account/ChangePassword.aspx.designer.cs , 759
ProgWCF/Backup/MembershipAdmin/Account/ChangePasswordSuccess.aspx , 532
ProgWCF/Backup/MembershipAdmin/Account/ChangePasswordSuccess.aspx.cs , 333
ProgWCF/Backup/MembershipAdmin/Account/ChangePasswordSuccess.aspx.designer.cs , 468
ProgWCF/Backup/MembershipAdmin/Account/Login.aspx , 3072
ProgWCF/Backup/MembershipAdmin/Account/Login.aspx.cs , 437
ProgWCF/Backup/MembershipAdmin/Account/Login.aspx.designer.cs , 1014
ProgWCF/Backup/MembershipAdmin/Account/Register.aspx , 5678
ProgWCF/Backup/MembershipAdmin/Account/Register.aspx.cs , 795
ProgWCF/Backup/MembershipAdmin/Account/Register.aspx.designer.cs , 1055
ProgWCF/Backup/MembershipAdmin/Account/Web.config , 330
ProgWCF/Backup/MembershipAdmin/anoy.svc , 86
ProgWCF/Backup/MembershipAdmin/Default.aspx , 749
ProgWCF/Backup/MembershipAdmin/Default.aspx.cs , 312
ProgWCF/Backup/MembershipAdmin/Default.aspx.designer.cs , 447
ProgWCF/Backup/MembershipAdmin/Global.asax , 99
ProgWCF/Backup/MembershipAdmin/Global.asax.cs , 1027
ProgWCF/Backup/MembershipAdmin/MembershipAdmin.csproj , 7403
ProgWCF/Backup/MembershipAdmin/MembershipAdmin.csproj.user , 1086
ProgWCF/Backup/MembershipAdmin/net.svc , 86
ProgWCF/Backup/MembershipAdmin/none.svc , 82
ProgWCF/Backup/MembershipAdmin/Properties/AssemblyInfo.cs , 1415
ProgWCF/Backup/MembershipAdmin/Scripts/jquery-1.4.1-vsdoc.js , 242990
ProgWCF/Backup/MembershipAdmin/Scripts/jquery-1.4.1.js , 168792
ProgWCF/Backup/MembershipAdmin/Scripts/jquery-1.4.1.min.js , 71922
ProgWCF/Backup/MembershipAdmin/Site.Master , 2196
ProgWCF/Backup/MembershipAdmin/Site.Master.cs , 320
ProgWCF/Backup/MembershipAdmin/Site.Master.designer.cs , 2171
ProgWCF/Backup/MembershipAdmin/Styles/Site.css , 4258
ProgWCF/Backup/MembershipAdmin/Web.config , 5856
ProgWCF/Backup/MembershipAdmin/Web.Debug.config , 1285
ProgWCF/Backup/MembershipAdmin/Web.Release.config , 1346
ProgWCF/Backup/MembershipAdmin/web.svc , 86
ProgWCF/Backup/ProgWcf.sln , 5220
ProgWCF/CertTool/CertMgr.Exe , 70992
ProgWCF/CertTool/makecert.exe , 55632
ProgWCF/CertTool/SetupCerts.bat , 1372
ProgWCF/Client/App.config , 4802
ProgWCF/Client/bin/Debug/Common.dll , 27136
ProgWCF/Client/bin/Debug/Common.pdb , 65024
ProgWCF/Client/bin/Debug/OnlyClinet.exe , 7168
ProgWCF/Client/bin/Debug/OnlyClinet.exe.config , 4802
ProgWCF/Client/bin/Debug/OnlyClinet.pdb , 13824
ProgWCF/Client/bin/Debug/OnlyClinet.vshost.exe , 11600
ProgWCF/Client/bin/Debug/OnlyClinet.vshost.exe.config , 4802
ProgWCF/Client/bin/Debug/OnlyClinet.vshost.exe.manifest , 490
ProgWCF/Client/Client.csproj , 2960
ProgWCF/Client/obj/x86/Debug/Client.csproj.FileListAbsolute.txt , 488
ProgWCF/Client/obj/x86/Debug/Client.csprojResolveAssemblyReference.cache , 8891
ProgWCF/Client/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache , 6823
ProgWCF/Client/obj/x86/Debug/OnlyClientForIIS.csproj.FileListAbsolute.txt , 531
ProgWCF/Client/obj/x86/Debug/OnlyClinet.csproj.FileListAbsolute.txt , 523
ProgWCF/Client/obj/x86/Debug/OnlyClinet.exe , 7168
ProgWCF/Client/obj/x86/Debug/OnlyClinet.pdb , 13824
ProgWCF/Client/Program.cs , 1956
ProgWCF/Client/Properties/AssemblyInfo.cs , 1446
ProgWCF/Common/bin/Debug/Common.dll , 27136
ProgWCF/Common/bin/Debug/Common.pdb , 65024
ProgWCF/Common/Common.csproj , 2836
ProgWCF/Common/DuplexChannelFactory.cs , 2625
ProgWCF/Common/DuplexClientBase.cs , 2473
ProgWCF/Common/InstanceContext.cs , 635
ProgWCF/Common/obj/Debug/Common.csproj.FileListAbsolute.txt , 503
ProgWCF/Common/obj/Debug/Common.dll , 27136
ProgWCF/Common/obj/Debug/Common.pdb , 65024
ProgWCF/Common/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache , 6719
ProgWCF/Common/Properties/AssemblyInfo.cs , 1438
ProgWCF/Common/SecureClientBase.cs , 6596
ProgWCF/Common/SecurityBehavior.cs , 19400
ProgWCF/Common/SecurityBehaviorAttribute.cs , 3494
ProgWCF/Common/SecurityHelper.cs , 18239
ProgWCF/Common/ServiceSecurity.cs , 253
ProgWCF/Common/WcfClient.cs , 785
ProgWCF/HostSvc/Anoymous.cs , 922
ProgWCF/HostSvc/App-comment.config , 8718
ProgWCF/HostSvc/App.config , 7495
ProgWCF/HostSvc/B2B.cs , 683
ProgWCF/HostSvc/bin/Debug/Common.dll , 27136
ProgWCF/HostSvc/bin/Debug/Common.pdb , 65024
ProgWCF/HostSvc/bin/Debug/HostSvc.exe , 13312
ProgWCF/HostSvc/bin/Debug/HostSvc.exe.config , 7495
ProgWCF/HostSvc/bin/Debug/HostSvc.pdb , 32256
ProgWCF/HostSvc/bin/Debug/HostSvc.vshost.exe , 11600
ProgWCF/HostSvc/bin/Debug/HostSvc.vshost.exe.config , 7495
ProgWCF/HostSvc/bin/Debug/HostSvc.vshost.exe.manifest , 490
ProgWCF/HostSvc/Helpers.cs , 1791
ProgWCF/HostSvc/HostSvc.csproj , 3266
ProgWCF/HostSvc/Interfaces.cs , 1485
ProgWCF/HostSvc/Internet.cs , 1218
ProgWCF/HostSvc/Intranet.cs , 1180
ProgWCF/HostSvc/IntranetMember.cs , 1322
ProgWCF/HostSvc/None.cs , 542
ProgWCF/HostSvc/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache , 7003
ProgWCF/HostSvc/obj/x86/Debug/HostSvc.csproj.FileListAbsolute.txt , 974
ProgWCF/HostSvc/obj/x86/Debug/HostSvc.csprojResolveAssemblyReference.cache , 8891
ProgWCF/HostSvc/obj/x86/Debug/HostSvc.exe , 13312
ProgWCF/HostSvc/obj/x86/Debug/HostSvc.pdb , 32256
ProgWCF/HostSvc/Program.cs , 5049
ProgWCF/HostSvc/Properties/AssemblyInfo.cs , 1440
ProgWCF/MembershipAdmin/About.aspx , 448
ProgWCF/MembershipAdmin/About.aspx.cs , 309
ProgWCF/MembershipAdmin/About.aspx.designer.cs , 444
ProgWCF/MembershipAdmin/Account/ChangePassword.aspx , 4484
ProgWCF/MembershipAdmin/Account/ChangePassword.aspx.cs , 326
ProgWCF/MembershipAdmin/Account/ChangePassword.aspx.designer.cs , 759
ProgWCF/MembershipAdmin/Account/ChangePasswordSuccess.aspx , 532
ProgWCF/MembershipAdmin/Account/ChangePasswordSuccess.aspx.cs , 333
ProgWCF/MembershipAdmin/Account/ChangePasswordSuccess.aspx.designer.cs , 468
ProgWCF/MembershipAdmin/Account/Login.aspx , 3072
ProgWCF/MembershipAdmin/Account/Login.aspx.cs , 437
ProgWCF/MembershipAdmin/Account/Login.aspx.designer.cs , 1014
ProgWCF/MembershipAdmin/Account/Register.aspx , 5678
ProgWCF/MembershipAdmin/Account/Register.aspx.cs , 795
ProgWCF/MembershipAdmin/Account/Register.aspx.designer.cs , 1055
ProgWCF/MembershipAdmin/Account/Web.config , 330
ProgWCF/MembershipAdmin/anoy.svc , 86
ProgWCF/MembershipAdmin/bin/Common.dll , 27136
ProgWCF/MembershipAdmin/bin/Common.pdb , 65024
ProgWCF/MembershipAdmin/bin/HostSvc.exe , 13312
ProgWCF/MembershipAdmin/bin/HostSvc.pdb , 32256
ProgWCF/MembershipAdmin/bin/MembershipAdmin.dll , 6656
ProgWCF/MembershipAdmin/bin/MembershipAdmin.pdb , 24064
ProgWCF/MembershipAdmin/Default.aspx , 749
ProgWCF/MembershipAdmin/Default.aspx.cs , 312
ProgWCF/MembershipAdmin/Default.aspx.designer.cs , 447
ProgWCF/MembershipAdmin/Global.asax , 99
ProgWCF/MembershipAdmin/Global.asax.cs , 1027
ProgWCF/MembershipAdmin/MembershipAdmin.csproj , 8160
ProgWCF/MembershipAdmin/MembershipAdmin.csproj.user , 1086
ProgWCF/MembershipAdmin/net.svc , 86
ProgWCF/MembershipAdmin/none.svc , 82
ProgWCF/MembershipAdmin/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache , 8986
ProgWCF/MembershipAdmin/obj/Debug/MembershipAdmin.csproj.FileListAbsolute.txt , 1191
ProgWCF/MembershipAdmin/obj/Debug/MembershipAdmin.csprojResolveAssemblyReference.cache , 14285
ProgWCF/MembershipAdmin/obj/Debug/MembershipAdmin.dll , 6656
ProgWCF/MembershipAdmin/obj/Debug/MembershipAdmin.pdb , 24064
ProgWCF/MembershipAdmin/Properties/AssemblyInfo.cs , 1415
ProgWCF/MembershipAdmin/Scripts/jquery-1.4.1-vsdoc.js , 242990
ProgWCF/MembershipAdmin/Scripts/jquery-1.4.1.js , 168792
ProgWCF/MembershipAdmin/Scripts/jquery-1.4.1.min.js , 71922
ProgWCF/MembershipAdmin/Site.Master , 2196
ProgWCF/MembershipAdmin/Site.Master.cs , 320
ProgWCF/MembershipAdmin/Site.Master.designer.cs , 2171
ProgWCF/MembershipAdmin/Styles/Site.css , 4258
ProgWCF/MembershipAdmin/Web.config , 5856
ProgWCF/MembershipAdmin/Web.Debug.config , 1285
最多只能显示150条信息!
