在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

+0

我也尝试通过把POST而不是GET,仍显示**对象对象错误无法加载资源:服务器响应状态415(无法处理消息,因为内容类型'application/json'是而不是期望的类型'text/xml; charset = utf-8'。)* 帮助我如何解决此问题 – Sathiya 2014-09-11 09:48:06