【问题标题】:SL4/WCF not working with HTTPSSL4/WCF 不使用 HTTPS
【发布时间】:2011-05-05 20:24:26
【问题描述】:

我在尝试在生产服务器上使用 https 获取 SL4/WCF 应用程序时需要帮助。该应用程序使用 http 可以完美运行,使用 https 它会加载 xap 并显示登录页面,但是在尝试进行身份验证或进行 wcf 调用时出现一般错误:

“操作过程中发生异常,导致结果无效。检查 InnerException 以获取异常详细信息。”

“[Async_ExceptionOccurred] 论据: 调试资源字符串不可用。通常,关键和论据提供了足够的信息来诊断问题。见http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.60310.0&File=System.dll&Key=Async_ExceptionOccurred

环境是 SL4 - MVVM、IIS7、Basic WCF、Silverlight 故障行为类和使用 Asp.net 成员资格提供程序的身份验证。网站和服务位于同一个目录中,所以我认为不存在跨域问题——该网站确实使用 http 并且 fiddler 没有显示缺少的 clientaccesspolicy.xml 文件——尽管我已经安装了该文件。在 xap 加载后,Fiddler 不会提供任何线索或流量。我也可以在使用 https 的同时直接浏览和访问服务。

任何帮助或建议将不胜感激。 谢谢, 最大。

这是 web.config:

<extensions>
  <behaviorExtensions>
    <add name="silverlightFaults" type="Accruit.RidgeLine.Behaviors.SilverlightFaultBehavior, Accruit.RidgeLine.Behaviors, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  </behaviorExtensions>
</extensions>

<behaviors>
  <serviceBehaviors>
    <behavior name="silverlightBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" httpsHelpPageEnabled="true" />
    </behavior>
    <behavior name="">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" httpsHelpPageEnabled="true" />
    </behavior>
  </serviceBehaviors>

  <endpointBehaviors>
    <behavior name="SilverlightFaultBehavior">
      <silverlightFaults />
    </behavior>
  </endpointBehaviors>
</behaviors>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

<services>
  <service name="Accruit.RidgeLine.Web.BankingService" behaviorConfiguration="silverlightBehavior" >
    <!-- Endpoint for Standard SOAP clients -->
    <endpoint address="" contract="Accruit.RidgeLine.Web.IBankingService"  
              binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_IBankingService"/>
    <!-- Endpoint for Silverlight clients -->
    <endpoint address="SilverlightEndPoint" contract="Accruit.RidgeLine.Web.IBankingService"
              binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_IBankingService_SilverlightEndPoint" 
              behaviorConfiguration="SilverlightFaultBehavior" />
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
  </service>
</services>


<client>
  <endpoint address="https://domainname.com/BankingService.svc"
      binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_IBankingService"
      contract="BankingService.IBankingService" name="BasicHttpBinding_IBankingService" />

  <endpoint address="https://domainname.com/BankingService.svc/SilverlightEndPoint"
      binding="basicHttpBinding" bindingConfiguration="basicHttpBinding_IBankingService"
      contract="BankingService.IBankingService" name="basicHttpBinding_IBankingService_SilverlightEndPoint" />
</client>

【问题讨论】:

  • 您是否按照说明进行操作?在我看来,按照说明操作会导致您在本地机器上看到更多描述性错误消息...要在本地机器上查看这些描述性错误消息并获取其他调试资源,请安装最新版本的 Silverlight for Developers您的 Windows 或 Mac 计算机。

标签: silverlight wcf ssl https


【解决方案1】:

除了我的评论之外,还有一些事情要检查:

Great link here,查看 sladapters 帖子。

这是Silverlight Deployment Guide,它最近刚刚推出,可从 MS 获得。那里的东西很结实。

我遇到的很多问题都与在 ServiceReference.ClientConfig 文件中为本地计算机编码的端点地址有关。我在我的解决方案中保留了开发副本和部署副本。鉴于您可以导航到该服务,它可能在这里被错误地引用...

【讨论】:

    【解决方案2】:

    该应用程序是使用 Silverlight Web 项目中包含的 wcf 服务构建的,并且绑定 uri 也被使用 Uri(Application.Current.Host.Source, "..") 以编程方式覆盖。我分离出 wcf 服务进入他们自己的项目并删除了 uri 代码(这会导致防火墙和 dsn 访问问题,因为 443 被转发到另一个端口)。虽然我在使用自签名 ssl 证书时仍然遇到问题,所以我们必须在Silverlight 客户端将与 wcf 服务进行通信。

    【讨论】:

      猜你喜欢
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 2012-02-09
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多