在HTML页面中调用WCF服务时出错
问题描述:
我需要创建一个WCF服务以从C#中的SQL数据库中检索数据,并使用JSON在HTML5中使用该WCF服务。在HTML页面中调用WCF服务时出错
我创建了WCF服务及其工作,但是当我尝试在HTML中使用它时,它显示“对象对象错误(无法加载资源:服务器响应的状态为415(无法处理消息,因为内容类型'应用/ JSON的;字符集= UTF-8' 是不是预期的类型 '文本/ XML的,字符集= utf-8')”
帮我解决这个
的Web.config:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service name="taskk2.Service1" behaviorConfiguration="">
<endpoint
address=""
binding="basicHttpBinding"
behaviorConfiguration=""
contract="taskk2.IService1"/>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
HtmlPage:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function() {
//$('#tbDetails').hide();
$('#tbDetails').show();
$('#btnClick').click(function() {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: 'Service1.svc/GetEmployeeDetails',
data: '{"Emp_Id": "' + $("#txtName").val() + '"}',
dataType: "json",
processData: false,
success: function (data) {
for (var i = 0; i < data.d.length; i++) {
$("#tbDetails").append("<tr><td>" + data.d[i].Emp_Id + "</td><td>" + data.d[i].Emp_Name + "</td><td>" + data.d[i].Emp_Age + "</td><td>" + data.d[i].Emp_Department + "</td><td>" + data.d[i].Emp_Salary + "</td></tr>");
}
},
error: function (result) {
alert(result);
}
});
});
});
</script>
<style type="text/css">
table,th,td
{
border:1px solid black;
border-collapse:collapse;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<b>Enter EmployeeId:</b> <input type="text" id="txtName" />
<input type ="button" id="btnClick" value="Get Data" />
<table id="tbDetails">
<thead style="background-color:#DC5807; color:White; font-weight:bold">
<tr style="border:solid 1px #000000">
<td>Emp_Id</td>
<td>Emp_Name</td>
<td>Emp_Age</td>
<td>Emp_Department
</td>
<td>Emp_Salary</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</form>
</body>
</html>
IService.cs:
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/GetEmployeeDetails/{Emp_Id}",
ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
EmployeeDetails[] GetEmployeeDetails(string Emp_Id);
}
答
WCF服务不指望JSON,但是,很可能,XML。您是否将服务配置为接受POST
请求和json数据?你可能会发现this question and answer有帮助。它描述了如何装饰你想用WebInvokeAttribute
调用的方法。
编辑:清理完代码后,我看到你用GET
装饰了方法。如上所述,这应该是POST
。
我也尝试通过把POST而不是GET,仍显示**对象对象错误无法加载资源:服务器响应状态415(无法处理消息,因为内容类型'application/json'是而不是期望的类型'text/xml; charset = utf-8'。)* 帮助我如何解决此问题 – Sathiya 2014-09-11 09:48:06