Vista下调式WCF的http服务的安全问题

Vista下调式WCF的http服务的安全问题
2009-01-17 22:41

Vista下调式WCF的http服务的安全问题

今天在Vista下开发了一个WCF的Tcp程序,跑的很正常,
突然想公开一下Http接口,按WCF的文档说明,应该没有问题的,但是非常令人气氛的说
服务进程没有权限打开端口,具体错误信息类似:
System.ServiceModel.AddressAccessDeniedException:HTTP 无法注册 URL http://+:8000/ServiceModelSamples/service/。进程不具有此命名空间的访问权限(有关详细信息,请参见 http://go.microsoft.com/fwlink/?LinkId=70353)。---> System.Net.HttpListenerException:访问被拒绝

msdn上提了三个步骤来解决这个问题:
1.如果计算机不是域成员,请将身份验证模式和保护级别设置为 None 以禁用传输安全性,如下面的示例配置所示:
确保通过设置终结点的 bindingConfiguration 属性将终结点与绑定关联。

确保在运行示例前更改 PoisonMessageServer、服务器和客户端上的配置。

2.注意:
将 security mode 设置为 None 等效于将 MsmqAuthenticationMode、MsmqProtectionLevel 和 Message 安全设置为 None。


3.若要使元数据交换正常工作,应当向 http 绑定注册一个 URL。这要求服务在具有提升权限的命令窗口中运行。否则,您将接收到异常

最后我以管理员权限来打开这个程序才能注册URL,看来Vista的安全性确实比较高,不知道该怎么写这个程序才能在vista下顺利运行

另外,我测试了一下tcp协议和basicHttp协议的性能差异:
两者居然差别不是特别大:
服务和客户端程序都在一个服务器上(vista)
以tcp方式调用500次,大概使用600毫秒
以http方式调用500次,大概使用800毫秒

整体来说http比tcp慢30%不到,还是能够接受
当然这是在本机,如果是在公网上跑,就没有这么乐观了。居然没笔调用才1毫秒多一点。神速啊!

附我完整测试的服务配置,供大家参考:
<system.serviceModel>
    <services>
      <service name="ServerPart.Server" behaviorConfiguration="sb">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:5353" />
            <add baseAddress="
http://127.0.0.1:5356/" />
          </baseAddresses>
        </host>
        <endpoint address="net" binding="netTcpBinding" bindingConfiguration="bd" contract="ServerPart.IServer" />
        <endpoint address="httpend" binding="basicHttpBinding" contract="ServerPart.IServer" bindingConfiguration="httpbd" />
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="bd">
        </binding>
      </netTcpBinding>
      <basicHttpBinding>
        <binding name="httpbd">
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="sb">
          <serviceMetadata />
          <!--<serviceMetadata httpGetEnabled="true" />-->
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
</system.serviceModel>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值