2015-05-16 42 views
0

我一直在努力從WCF服務中獲取數據,但沒有運氣,我很感激您的幫助,這是我的代碼,並且我總是在錯誤函數中獲得「0 undefined」在Ajax調用:使用jQuery使用WCF服務

Service1.svc.cs

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class Service1 : IService1 
{ 
    public string GetData() 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     string output = "It worked"; 

     return serializer.Serialize(output); 
    } 
} 

IService1.cs

[OperationContract] 
    [System.ServiceModel.Web.WebInvoke(Method = "POST", 
     ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json)] 
    string GetData(); 

的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 name="ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="ServiceAspNetAjaxBehavior"> 
      <enableWebScript /> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="MyService.Service1"> 
     <endpoint address="" binding="webHttpBinding" contract="MyService.IService1" behaviorConfiguration="ServiceAspNetAjaxBehavior"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
      </endpoint> 
      <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> 

jQuery的通話

<script type="text/javascript"> 

    $(document).ready(function() { 
     CallMyService(); 
    }); 

    function CallMyService() { 
     $.ajax({ 
      type: "POST", 
      url: "http://localhost:54368/Service1.svc/GetData", 
      data: '', 
      dataType: "json", 
      contentType: "application/json", 
      success: ServiceSucceeded, 
      error: ServiceFailed 
     }); 
    } 

    function ServiceFailed(result) { 
     alert(result.status + ' ' + result.statusText); 
    } 

    function ServiceSucceeded(result) { 
     var resultObject = result.GetDataResult; 
     alert(resultObject); 
    } 

</script> 

如果我試圖通過添加服務引用消耗從C#項目中的WCF服務,我得到這個:

無法找到在ServiceModel客戶端配置部分中引用合同'myReference.IService1'的默認端點元素。這可能是因爲沒有找到適用於您的應用程序的配置文件,或者因爲在客戶端元素中找不到匹配此合同的端點元素。

它可能與錯誤有關嗎? WCF服務在本地託管在IIS中。

我只是不知道還有什麼要檢查。

UPDATE:

我只是找到了解決方案,事實證明,我需要用下面的代碼WCF服務解決方案Global.asax文件:

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost"); 
     if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
     { 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE"); 

      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
      HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
      HttpContext.Current.Response.End(); 
     } 
    } 

其中localhost是你的WCF服務所在的地方,在那之後,它就可以工作!非常感謝您告訴我有關Javascript的調試器的兩個人,這讓我知道了!

+1

result.GetDataResult正在給你那個錯誤。您可以從Google Chrome調試您的JavaScript,並查看結果中返回的值。 – Hakunamatata

+0

我剛把它改成:成功:function(result){ \t \t \t \t \t alert(result.d); \t \t \t \t}具有相同的結果。如何從谷歌瀏覽器調試JavaScript代碼? – saman0suke

+1

而不是在你的jQuery腳本中使用'alert(resultObject)',使用'console.log(result)'。然後,您可以在瀏覽器的開發控制檯中查看結果,通常使用「F12」鍵打開該結果。在打開的面板中查找名爲Console的選項卡。 – Schlaus

回答

0

UPDATE:

我只是找到了解決方案,事實證明,我需要用下面的代碼WCF服務解決方案Global.asax文件:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost"); 
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
    { 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE"); 

     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
     HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
     HttpContext.Current.Response.End(); 
    } 
} 

其中localhost是你的WCF服務所在的地方,在那之後,它就可以工作!非常感謝您告訴我有關Javascript的調試器的兩個人,這讓我知道了!