【问题标题】:Confused -> Silverlight 4 not allowing me to consume a WCF service using BasicHttpBinding?困惑-> Silverlight 4 不允许我使用 BasicHttpBinding 使用 WCF 服务?
【发布时间】:2011-09-29 19:04:08
【问题描述】:

好吧,我完全糊涂了,希望我在这里遗漏了一些非常明显的东西。我正在使用托管在使用“BasicHttpBinding”配置的 Windows 服务中的我的 WCF 服务(在 ASP.NET 中稳定且工作)。当我尝试从 Silverlight 4 应用程序中使用它时,我在 VS.NET 中收到以下错误:

*“自定义工具警告:位于地址“https://mywcfservice:8000/WCFServices/MyService”的端点“BasicHttpBinding_IMyService”与 Silverlight 4 不兼容。跳过... MyService\Reference.svcmap"*

什么!?我知道并且已经通过箍跳来制作一个有问题的netTCPBinding,它克服了SL4中的上述错误,但是为什么BasicHttpBinding在SL4上有任何问题?我认为自从 SL2 BasicHttpBinding 的第 1 天起,Silverlight 就可以使用该绑定了。这是我的 WCF 服务器 配置:

  <service behaviorConfiguration="ServiceBehavior" name="MyService">
    <endpoint address="" binding="basicHttpBinding"
              bindingConfiguration="BasicHttpWindowsBinding"
              contract="IMyService"/>
    <endpoint address="mex"
              binding="mexHttpsBinding"
              contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="https://mywcfservice:8000/WCFServices/MyService"/>
      </baseAddresses>
    </host>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceDebug includeExceptionDetailInFaults="false"/>
      <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpWindowsBinding"
             maxReceivedMessageSize="214748"
             messageEncoding="Mtom"
             transferMode="Streamed">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>

  </basicHttpBinding>     
</bindings>

我在这里缺少什么?如果有人可以帮助我或指导可能不正确的地方,请告诉我。谢谢!

编辑:认为我可能正在追踪 - 该服务使用“消息合同”作为方法中的参数,我想知道这是否会导致任何问题。但是,从这篇 MSDN 文章中:“Silverlight 4 支持消息合同” http://msdn.microsoft.com/en-us/library/cc896571(v=vs.95).aspx 所以我仍然不能 100% 确定。我在消费时选中了“始终生成消息合同”,但没有任何区别。

【问题讨论】:

  • Silverlight 和 WCF:link

标签: silverlight wcf


【解决方案1】:

您在配置文件中使用了一些特殊属性/值:

BasicHttpWindowsBinding 的 transferMode 和 messageEncoding 设置为非默认值。

根据注册了类似问题的WCF service for Sl3,您应该执行以下操作:

messageEncoding="Mtom"

尝试:messageEncoding="Text"。

或 transferMode="StreamedResponse"

尝试:transferMode="Buffered"。

如果您尝试这些步骤,您可能会得到一个正在运行的情况,并且可以从那时起构建细节,确保它继续为 SL-WCF 连接工作。

【讨论】:

  • Uhhh... #1 根本不是真的。您绝对可以使用带有 BasicHttpBinding 的 https 来托管服务。我多年来一直使用这项服务,并在 ASP.NET、WPF 和 WinForms 中使用。这是一个 MSDN 博客,其中记录了以下内容:“BasicHttp 的选择包括无安全性、HTTPS 安全性、SOAP 安全性和使用 SOAP 凭据的 HTTPS 安全性。” @987654322 @ 这也使您的#2 和#3 不正确。
  • 我改变了答案,因为你是对的。今晚学到了一些东西:-) 但在第 2 点中还有其他可能感兴趣的项目,我发现并包含了对这些设置与 SL 结合使用的问题的参考。你能尝试看看这些是否会导致问题吗?
  • 感谢更新,我会试一试并回复。但是,请阅读我的 OP 底部的“编辑”。我认为问题在于我使用“消息合同”。 SL 我认为不理解 SOAP 消息标头,我认为这可能是导致问题的原因。
  • 我的设置确实与 SL4 不兼容,特别是“流式传输”值。切换它可以解决问题,但不能解决整体问题,因为现在我正试图弄清楚如何将文件分块到服务器以模仿我之前对流媒体所做的事情。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
相关资源
最近更新 更多