在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#网络编程 → WCF四种常用应用场景实例下载

WCF四种常用应用场景实例下载

C#网络编程

下载此实例
  • 开发语言:C#
  • 实例大小:0.61M
  • 下载次数:90
  • 浏览次数:1353
  • 发布时间:2012-12-16
  • 实例类别:C#网络编程
  • 发 布 人:chaogu
  • 文件格式:.zip
  • 所需积分:2
 相关标签: WCF

实例介绍

【实例简介】

使用注意:
建立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();
			}

		}

 

标签: WCF

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警