如何使用jQuery调用WCF服务

在本文中,将探讨如何从jQuery客户端代码调用Windows Communication Foundation (WCF) 服务,并指出了需要注意的特殊事项。在开始阅读和遵循本文之前,请先阅读这篇博客文章,该文章描述了如何创建WCF服务:。

步骤1:设置ASP.NET兼容性模式

一旦完成了WCF服务的创建,需要在服务器类型类上指定属性,以实现ASP.NET兼容性模式。这样,WCF服务就可以像普通的ASMX服务一样工作,并支持所有现有的ASP.NET功能。通过设置兼容性模式,WCF服务将需要托管在IIS上,并使用HTTP与其客户端应用程序通信。

以下是设置ASP.NET兼容性模式的代码示例:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Service : IService { public string GetData(int value) { return string.Format("You entered: {0}", value); } public string[] GetUser(string Id) { return new User().GetUser(Convert.ToInt32(Id)); } }

在上述代码中,定义了一个名为Service的类,它实现了IService接口,并重写了GetData和GetUser方法。

步骤2:指定操作级别的属性

接下来,需要在服务契约文件中为每个方法或操作指定操作级别的属性。为此,请使用WebInvoke属性来标记服务操作,这表明该操作响应除GET之外的HTTP请求。

[OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] string[] GetUser(string Id);

在上述代码中,为GetUser方法添加了OperationContract和WebInvoke属性。其中,Method属性设置为POST,表示数据将通过POST方法发送到服务。ResponseFormat属性设置为WebMessageFormat.Json,表示数据将以JSON格式返回。

步骤3:修改Web.Config文件

需要修改Visual Studio为WCF服务创建的默认配置文件Web.Config,以便它能够使用jQuery客户端代码发送的HTTP协议请求。

<system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="ServiceBehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="EndpBehavior"> <webHttp /> </behavior> </endpointBehaviors> </behaviors> <services> <service behaviorConfiguration="ServiceBehavior" name="Service"> <endpoint address="" binding="webHttpBinding" contract="IService" behaviorConfiguration="EndpBehavior" /> </service> </services> </system.serviceModel>

在上述配置文件中,修改了EndPoint设置,并添加了EndPointBehaviors以支持WEBHTTP请求。

步骤4:使用jQuery调用WCF服务

要使用jQuery调用Web服务,即调用WCF服务,可以使用jQuery.ajax()或jQuery.getJSON()。在本文中,使用了jQuery.ajax()方法。

<script type="text/javascript"> var Type; var Url; var Data; var ContentType; var DataType; var ProcessData; function WCFJSON() { var userid = "1"; Type = "POST"; Url = "Service.svc/GetUser"; Data = '{"Id": "' + userid + '"}'; ContentType = "application/json; charset=utf-8"; DataType = "json"; var ProcessData = true; CallService(); } function CallService() { $.ajax({ type: Type, url: Url, data: Data, contentType: ContentType, dataType: DataType, processData: ProcessData, success: function(msg) { ServiceSucceeded(msg); }, error: ServiceFailed }); } function ServiceFailed(result) { alert("Service call failed: " + result.status + " " + result.statusText); Type = null; var Url = null; Data = null; ContentType = null; DataType = null; ProcessData = null; } function ServiceSucceeded(result) { if (DataType == "json") { resultObject = result.GetUserResult; for (i = 0; i < resultObject.length; i++) { alert(resultObject[i]); } } } function ServiceFailed(xhr) { alert(xhr.responseText); if (xhr.responseText) { var err = xhr.responseText; if (err) error(err); else error({ Message: "Unknown server error." }); } return; } $(document).ready(function() { WCFJSON(); }); </script>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485