通过 SSL 使用 JSONP 的 WCF 服务
Posted
技术标签:
【中文标题】通过 SSL 使用 JSONP 的 WCF 服务【英文标题】:WCF service with JSONP over SSL 【发布时间】:2011-07-08 16:58:01 【问题描述】:我们有一个托管 WCF 服务的 SSL 配置网站。服务的绑定有crossDomainScriptAccessEnabled="true"
,通信使用JSON序列化。
当我们从 http 请求这个服务时,它返回 JSONP,但是当使用 HTTPS 请求它时,它只返回 JSON。无论哪种方式,我都需要 JSONP,请帮忙。
目前的配置是这样的:
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
<behaviors>
<serviceBehaviors>
<behavior name="JsonServiceBehaviors">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors><behavior name="webHttpBehavior">
<webHttp />
</behavior></endpointBehaviors>
</behaviors>
<services>
<service name="Backend.CIService" behaviorConfiguration="JsonServiceBehaviors">
<endpoint address="" binding="webHttpBinding"
bindingConfiguration="webHttpBindingWithJsonP" contract="Backend.ICIService"
behaviorConfiguration="webHttpBehavior"/>
</service></services>
【问题讨论】:
【参考方案1】:如果你使用这个配置会发生什么:
<webHttpBinding>
<binding name="jsonp" crossDomainScriptAccessEnabled="true" />
<binding name="jsonpSsl" crossDomainScriptAccessEnabled="true">
<security mode="Transport" />
</binding>
</webHttpBinding>
<behaviors>
<serviceBehaviors>
<behavior name="JsonServiceBehaviors">
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="Backend.CIService" behaviorConfiguration="JsonServiceBehaviors">
<endpoint address="" binding="webHttpBinding"
bindingConfiguration="jsonp" contract="Backend.ICIService"
behaviorConfiguration="webHttpBehavior"/>
<endpoint address="" binding="webHttpBinding"
bindingConfiguration="jsonpSsl" contract="Backend.ICIService"
behaviorConfiguration="webHttpBehavior"/>
</service>
</services>
问题在于,如果您想通过 HTTP 和 HTTPS 调用服务,您必须提供两个端点 - 一个用于 HTTP,一个用于 HTTPS。
【讨论】:
我以前从未能够同时使用 http 和 https,即使使用多个端点也是如此。我不确定我到底做错了什么,但这是我见过的最不容易混淆(也是最成功)的 wcf 答案。事实上这是有道理的 :) 不仅如此,它还让我对跨域脚本的需求变得多余!呜呼! :D 对于 WCF 的新手...以上是关于通过 SSL 使用 JSONP 的 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章
经过身份验证的服务不支持跨域 javascript 回调。通过 SSL 代理对 WCF 服务的 AJAX 查询