其它的先放一邊。今天先來分享一下前段時間給公司做網站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只是了解了些基礎。哪里不對的望各位大神指點(勿噴!)。有什么我們多多交流。