2011-03-04 174 views
7

我們有一個SSL配置的網站,它承載了一個WCF服務。該服務的綁定具有crossDomainScriptAccessEnabled="true",通信使用JSON進行序列化。通過SSL使用JSONP的WCF服務

當我們從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> 

回答

17

如果你使用這個配置會發生什麼:

<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。

+0

工作正常!太感謝了! – 2011-03-04 10:01:58

+0

即使有多個端點,我也無法在同一時間獲得http和https的工作。我不確定我究竟做錯了什麼,但這是我見過的最難以理解的(也是最成功的)wcf答案。事實上,它是有道理的:)不僅如此,這使得我需要跨域腳本冗餘!哇噢! :D – Radderz 2015-04-20 00:42:13

+0

對於那些新的WCF ... 元素需要進入元素。 – JamesQMurphy 2015-07-07 04:12:17