设为首页 收藏本站
查看: 1347|回复: 0

[经验分享] WCF分布式开发常见错误(21):unable to open its IChannelListener.分发器未能打开侦听器

[复制链接]

尚未签到

发表于 2019-1-28 07:23:02 | 显示全部楼层 |阅读模式
我在进行WCF基于 UserName 和 Passoword的安全验证编程的时候遇到这个错误:
The ChannelDispatcher at 'http://localhost:8001/WCFService' with contract(s) '"IWCFService"' is unable to open its IChannelListener. 'http://localhost:8001/WCFService' with contract(s) '"IWCFService的通道分发器未能通道打开侦听器。WCF安全问题一直困扰很多人,相信很多WCF学习者也对此非常头疼。这个错误我尝试了很久都没有解决。后来我把此问题发到WCF英文论坛,有个老外Rodrigo回答了我问题,但是没有直接答案,算是给了我一个提示。因为之前我猜测WCF安全模式里可以不适用证书。因为WSE3.0里我记得就不需要使用。他告诉了WCF安全强制要求提供证书【1】原问题地址:http://social.microsoft.com/Forums/zh-CN/wcf/threads
I have a question for WCF UserName and Passoword Validation.
I use Message security mode,but and NetTcpBinding,Console Selfhost.
But when I run the host application,Then throwed an exception:
The ChannelDispatcher at 'net.tcp://localhost:9001/WCFService' with contract(s) '"IWCFService"' is unable to open its IChannelListener.
  I have try to solve it myself,But ,all methods are helpless,When I remove the codes in the config file it is ok :
        
         
         
            
         
        
is there anyone can give some tips?
Thanks a lot
错误截图:

-----------------------------------------------------------------
【2】原因:
       因为这里WCF服务使用的安全模型为:Message。WCF要求消息安全必须提供证书支持。而配置文件里没有设置。所以才出现这个错误。
     我搜索的此错误的很多帖子,基本问题和解决方法都不清晰,导致这个问题的原因很多。我最后把这个问题发到WCF的英文论坛,期待能有帮助的答案出现。

【3】解决办法:
    要解决这个问题,根本还是需要解决证书的配置问题。因为使用的是XP环境开发,所以证书配置比较麻烦,以前在做WSE3.0文章的时候,编写代码,也曾经详细学习过证书的制作。也准备了文章WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理,记录了详细的证书制作过程。
   今天这里还是要使用到证书,主要问题就是要制作一个证书,然后在配置文件里进行配置。主要步骤如下:
(1)制作证书:
Microsoft Visual Studio 2008-->Visual Studio Tools-->Visual Studio 2008 命令提示行里输入:
makecert -r -pe -n "CN=FrankWCFServer" -ss My -sky exchange
具体的参数说明:详细帮助文档:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp
------------------------------------------------------------------------------------------------
-sr CurrentUser  --      证书存储位置。Location 可以是 currentuser(默认值)或 localmachine
-ss My  --                   证书存储名称,输出证书即存储在那里。My表示保存在“个人”
-n CN=MyTestCert --    证书名称。此名称符合 X.500 标准。最简单的方法是在双引号中指定此名称,并加上前缀 CN=;例如,"CN=FrankXu"。
-sky exchange --         指定颁发者的密钥类型,必须是 signature、exchange 或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。
-pe --                         私钥标记为可导出。这样私钥包括在证书中。
-----------------------------------------------------------------------------------
这个命令生成一个名字为FrankWCFServer的证书,被保存到了当前用户的个人证书存储区内。一般我们自己开发使用的Windows证书服务来管理和获取证书。
运行成功以后,这里可以再浏览器--工具--选项里查看证书:


(2)设置证书:在WCF服务的配置文件里,设置对应的证书。直接在WCF服务端证书节点里添加如下代码即可:

   整个服务的参考代码如下:


            
                 
                 
                 
                 
                 
                     
                        
                     
                 
            
         
         
            
                 
                     
                     
                     
                        
                        
                        
                             
                        
                        
                     
                 
               
            
         
         
            
                 
                     
                        
                     
                 
            
         
         

【4】总结:
   WCF安全开发一直是比较复杂的问题,因为不论相对于以前的Web Service 在Soap Header消息里封装UserName和Password的简单方式 ,还是和WSE3.0的直接提供 UserName和Password的Validation比较,都复杂了不少,这里主要涉及的是证书的设置和使用。对很多只是在XP环境下开发的学习者来说,证书的制作和安装已经是困难重重,何况还要理解一堆证书相关的安全的概念,包括加密算法、签名等一系列概念,很多人在学WCF安全开发的时候都会感觉无所适从,遇到问题也很难解决。详细的资料和可执行示例代码很少,几乎权威的参考文档都是英文。理解也非常困难。这个错误相信很多朋友也遇到过,就整理出来大家一起参考。         

参考资料:
http://msdn.microsoft.com/zh-cn/library/cc949011(en-us).aspx
http://social.microsoft.com/Forums/zh-CN/wcf/threads



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668434-1-1.html 上篇帖子: 进程打开的文件句柄数量超过系统默认值1024,就会提示“too many files open”信息 下篇帖子: CTSSD服务无法正常启动:Failure 4 in trying to open SV key PROCL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表