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

    技术2022-05-19  27

    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>


    最新回复(0)