如何在IIS7中配置WCF服务:HTTPS,Sessions,wsHttpBinding(SOAP)

时间:2010-06-17 11:44:19

标签: wcf session c#-4.0 wshttpbinding

情况:

  1. 我们使用IIS7,(.NET4)
  2. 进行Windows 2008 Web服务
  3. 我们可以通过默认的HTTPS(443)端口
  4. 与webserver 进行通信
  5. 服务器上托管了一个ASP.NET网站,该服务是网站代码的一部分。
  6. 某些客户端(支持WCF的桌面应用程序)希望与我们的新WCF Web服务进行通信
  7. 各方之间的邮件大小可以是100 - 400 kb
  8. 我们希望将WCF服务作为IIS的一部分。
  9. 在客户端,我们请求自定义用户名和密码以连接到我们的服务
  10. 有更长的会话,后面有更多的DB processign
  11. 还有快速短会 - 比如来自客户端的ping
  12. 客户端密码存储在我们的网络服务器上(来自数据库) - 应根据这些密码对客户端进行身份验证。
  13. 问题
    1.从这些限制中可以使用哪种最佳协议? 你会默认使用会话吗? 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>
    

    我的感觉是这种运输&amp;消息securtiy太多了 - 我的意思是我们真的需要这个以便允许与wsHttpBinding进行会话吗?

2 个答案:

答案 0 :(得分:0)

  1. wsHttpBinding,保持http和安全性,IIS将管理服务的生命周期。此外,您可能需要专用的应用程序池。
  2. 使用会话与否是设计的问题。如果在呼叫之间存在状态,则使用会话,否则使用每次呼叫。 ping操作不需要Sessions。
  3. 我建议以下绑定配置以及每次调用:

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

    希望它有所帮助!

答案 1 :(得分:0)

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

Beaud的答案帮助很大 - 但缺少的部分是自定义名称和密码validaror: 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>

也许它对某人有帮助......

在找到这些 magic 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>