WCF配置問題(配置WCF跨域)


其它的先放一邊。今天先來分享一下前段時間給公司做網站WCF服務接口的心得。


配置文件的配置問題

  這里既然討論WCF配置文件的問題,那么怎么創建的就不一一講解了。好多博主都有提過的。所以直接分享自己開發時的收獲,這里感謝好多給我啟發的人,@好多人....

  我這里就拿登錄接口來分享下吧。

  先貼出代碼。

  

這是服務端代碼

 

因為ASP的兼容性問題,這里的AspNetCompatibilityRequirementsMode用Allowed,(----2018-03-30修改——其實這里需要打開ASP兼容是因為在配置文件里把它給打開了,不配置也是OK的。-----)
(這里說一下,因為前段用Ajax調的接口,所以用了callback)-------還是跨域的問題。

 

namespace WCFService.Services
{
    // 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼、svc 和配置文件中的類名“Login”。
    // 注意: 為了啟動 WCF 測試客戶端以測試此服務,請在解決方案資源管理器中選擇 Login.svc 或 Login.svc.cs,然后開始調試。
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")]
    public class Get_Login : ILogin
    {
        /// <summary>
        /// 登錄
        /// </summary>
        /// <param name="id"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        string ILogin.Login(string id, string pwd)
        {
            return BLL.LoginBLL.Instance.Login(id, pwd);
        }
    }
}

 

這是契約代碼

namespace WCFService.IBLL
{
    // 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼和配置文件中的接口名“ILogin”。
    [ServiceContract]
    public interface ILogin
    {
        [OperationContract]
        [WebInvoke(
            Method = "GET",
            RequestFormat = WebMessageFormat.Json,
            ResponseFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Bare,
            UriTemplate = "/Login?id={id}&pwd={pwd}")]
        string Login(string id, string pwd);
    }
}

服務契約這里使用的是Get方法


 

  先配置服務的ABC

A. address為空就行

B. binding這里我們綁定為webhttpbinding(因為前端是H5,所以只能用http請求,其它按情況而定)

C. contract綁定的服務契約(當然啦,這里綁定的就是我們上面的ILogin)

ABC配置完成后基本的WCF服務已經是可以使用了的。但是我們這里講解的它的跨域問題,WCF最主要的還是配置問題。這個是關鍵。接下來我們說說這個跨域問題。

 

  配置跨域

如需跨域的話要配置下面幾點(僅供參考)

服務配置也貼出來吧

<!--登錄-->
      <service name="Dar.WCFService.Services.Get_Login">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding"
          bindingConfiguration="HttpJsonBinding" contract="Dar.WCFService.IBLL.ILogin" />
      </service>

這里說一下跨域除了配置ABC外還要加bindingConfiguration屬性,binding配置為webHttpBinding,以下是為bindingConfiguration配置允許跨域

<!--指定腳本可以跨域-->
    <bindings>
      <webHttpBinding>
        <binding name="HttpJsonBinding" crossDomainScriptAccessEnabled="true"/>
      </webHttpBinding>
    </bindings>

接下來配置服務行為

<behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <!-- 配置指定允許web腳本訪問-->
          <webHttp/>
          <!--<enableWebScript />-->
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

這里順帶說一下。

aspNetCompatibilityEnabled和multipleSiteBindingsEnabled都要設置為true


 

有點累了,睡個午覺。就先講那么多,萌新一個。對WCF只是了解了些基礎。哪里不對的望各位大神指點(勿噴!)。有什么我們多多交流。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM