【问题标题】:How to configure WCF service in IIS7: HTTPS, Sessions, wsHttpBinding (SOAP)如何在 IIS7 中配置 WCF 服务:HTTPS、Sessions、wsHttpBinding (SOAP)
【发布时间】:2010-06-17 11:44:19
【问题描述】:

情况:

  1. 我们有带有 IIS7 (.NET4) 的 Windows 2008 Web 服务器
  2. 我们可以通过默认的 HTTPS (443) 端口与网络服务器通信
  3. 服务器上有一个 ASP.NET 网站,该服务是网站代码的一部分。
  4. 一些客户端(支持 WCF 的桌面应用程序)希望与我们的新 WCF Web 服务进行通信
  5. 双方之间的消息大小可以是 100 - 400 kb
  6. 我们希望保留 IIS 的 WCF 服务部分。
  7. 在客户端,我们请求自定义用户名和密码以连接到我们的服务
  8. 有更长的会话,后面有更多的数据库进程
  9. 还有快速的短会话 - 例如来自客户端的 ping
  10. 客户端密码存储在我们的网络服务器上(来自 DB) - 客户端应根据这些密码进行身份验证。

问题
1. 根据这些限制,最好使用什么协议?
2. 你会默认使用会话吗?
3.首先尝试了这个绑定(它可以工作,但是没有会话支持)

  <!--define a SOAP binding-->
  <wsHttpBinding>
    <binding name="DefaultSOAPBasedHTTPSBinding" maxReceivedMessageSize="400000">
      <readerQuotas maxArrayLength="102400" />
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </wsHttpBinding>

启用会话:

  <wsHttpBinding>
    <binding name="DefaultSOAPBasedHTTPSBinding" maxReceivedMessageSize="400000">          
      <readerQuotas maxArrayLength="102400" />
      <reliableSession enabled="true" />
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Basic" />
        <message clientCredentialType="Certificate"/>
      </security>
    </binding>
  </wsHttpBinding>

我的感觉是这种传输和消息安全太多了 - 我的意思是我们真的需要这个来允许与 wsHttpBinding 的会话吗?

【问题讨论】:

    标签: wcf session c#-4.0 wshttpbinding


    【解决方案1】:
    1. wsHttpBinding,保持 http 和安全性,IIS 将管理服务的生命周期。此外,您可能需要一个专用的应用程序池。
    2. 是否使用 Session 是设计问题。如果在调用之间存在要维护的状态,则使用会话,否则每次调用都使用。 ping 操作不需要会话。

    我建议使用以下绑定配置以及每次调用:

      <wsHttpBinding>
        <binding name="DefaultSOAPBasedHTTPSBinding" maxReceivedMessageSize="400000">          
          <readerQuotas maxArrayLength="102400" />
          <security>
            <message clientCredentialType="Username"/>
          </security>
        </binding>
      </wsHttpBinding>
    

    希望对你有帮助!

    【讨论】:

    • 谢谢! 1. 是的,关于应用程序池,我也有同样的想法。所以主网站下的专用应用程序。 2. 所以会话...拥有它们会很好,因为有几个不同的请求需要身份验证。当会话还活着时,我不需要每次都转向数据库。所以问题仍然存在——第二个“DefaultSOAPBasedHTTPSBinding”可以简化吗?使用 IIS 托管:“”配置有什么效果?
    • 只有你知道最好对数据库或实例进行管理以管理资源,但需要管理会话......如果我是你,我不会使用它们。顺便说一句,在没有会话的情况下仍然可以进行身份​​验证。
    【解决方案2】:

    所以,最后我使用了 Session,因为它没有太大的性能影响。这也是一个约束,我们应该知道如何通过网络服务与我们交谈。所以我们需要认证。

    Beaud 的回答有很大帮助 - 但是缺少的部分是自定义名称和密码验证器: http://msdn.microsoft.com/en-us/library/aa702565.aspx

    有了这个 web.config:

            <wsHttpBinding>
                <binding name="DefaultSOAPBasedHTTPSBinding" maxReceivedMessageSize="400000">
                    <readerQuotas maxArrayLength="102400"/>
                    <reliableSession enabled="true"/>
                    <security mode="TransportWithMessageCredential">
                        <transport clientCredentialType="Basic"/>
                        <message clientCredentialType="UserName"/>
                    </security>
                </binding>
            </wsHttpBinding>
    

    也许它可以帮助某人......

    WCF 跟踪在发现这些神奇 WCF 配置问题时也有很大帮助:

    <system.diagnostics>
        <trace autoflush="true"/>
        <sources>
            <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
                <listeners>
                    <add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="SdrConfigExample.e2e"/>
                </listeners>
            </source>
        </sources>
    </system.diagnostics>
    

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多