上一篇,我们介绍使用WCF代替传统的WebService. 那么代替的话 我们客户端用JS也应该可以调用。
.net4.0中我们不仅可以调用,还可以很简单的调用。
代码如下:
服务端:
using System.ServiceModel.Activation; //这个告诉我们是否动态加载ServiceHost宿主 //要以IIS管道运行WCF服务 只需要加上这个特性就可以 运行网站的同时 运行WCF服务 AJAX也可以请求到了 [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)] public class ProductService:IproductService { public static IList<Product> products = new List<Product>() { new Product{Id="1",Department="IT部门",Name="Yuhao",Grade="软件开发"}, new Product{Id="2",Department="IT部门",Name="Yuhao1",Grade="前端开发"} }; #region IproductService 成员 public IEnumerable<Product> GetAll() { return products; } public Product Get(string id) { Product product = products.FirstOrDefault(p => p.Id == id); if (null != product) { return product; } return null; } public void Create(Product product) { products.Add(product); } public void Update(Product product) { Product p = this.Get(product.Id); if (null != p) { products.Remove(p); } products.Add(product); } public void Detele(string id) { Product product = this.Get(id); if (null != product) { products.Remove(product); } } #endregion }
服务接口和服务类,就不贴代码,一样。
客户端web.config配置:
<!--这里是.NET4.0新特性 只需小小的配置下即可 -->
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
<!--aspNetCompatibilityEnabled true 表示是否开启asp.net 管道通信 这里我们要用AJAX去请求 所以要开启-->
<serviceActivations>
<add relativeAddress="ProductService.svc" service="ProductService" factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"/>
<!--factory 是是否支持AJAX的关键-->
</serviceActivations>
</serviceHostingEnvironment>
<!--下面是开启元数据的关键 也可以不开启-->
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
客户端JS调用方式:
<script type="text/javascript">
function ReturnAjax() {
$.ajaxSettings.contentType = "application/json";
$.post("ProductService.svc/Getall", '', function (data) {
//因为返回来的是JSON 所以我们要循环输出
$.each(data.d, function (i) { $("#list").append("<li>编号:" + data.d[i].Id + " 部门:" + data.d[i].Department + "</li>") })
});
}
</script>
好了 就这么简单,我就可以完全调用自己的WCF服务。
下一篇我们将讲解 JavaScript调用wcf rest方式
示例代码下载: