2012-06-13 228 views
0

可能重複:
WCF Web Service returns 「Bad Request」 error when invoked through JavascriptAjax調用WCF Web服務將返回400錯誤請求

我那裏有一個方法測試(一個簡單的WCF Web服務服務1),它返回一個字符串。我在測試機器上部署了這個Web服務,但是當我嘗試從瀏覽器調用Test方法時,我得到一個400錯誤請求錯誤。當我嘗試通過AJAX GET請求調用該方法時會發生同樣的情況。但令人驚訝的是,該方法在通過WCFTestClient調用時返回正確的結果。

下面是代碼:

[ServiceContract] 
public interface IService1 
{ 
    // This method can be called to get a list of page sets per report. 
    [OperationContract] 
    [WebGet] 
    string Test(); 
}  

public class Service1 : IService1 
{ 
    public string Test() 
    { 
     return "test"; 
    } 
} 

這是我的AJAX請求:

var serverUrl1 = 'http://' + baseUrl + ':86/Service1.svc'; 

function GetTestString() 
{ 
     var methodUrl = serverUrl1 + "/Test"; 
     $.ajax({ 
    async: false, 
       type: "GET", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
      url: methodUrl, 
       beforeSend: function (XMLHttpRequest) { 
     //ensures the results will be returned as JSON. 
       XMLHttpRequest.setRequestHeader("Accept", "application/json"); 
       }, 
    success: function (data) { 
     ShowQRGSlides(data.d); 
    }, 
    error: function (XmlHttpRequest, textStatus, errorThrown) { 
     alert("ERROR: GetAvailablePages() Check your browsers javascript console for more details." + " \n XmlHttpRequest: " + XmlHttpRequest + " \n textStatus: " + textStatus + " \n errorThrown: " + errorThrown); 
    } 
    }); 

} 

這裏是我的web服務的web.config文件:

<?xml version="1.0"?> 
<configuration> 

<system.web> 
<compilation debug="true" targetFramework="4.0" /> 
<customErrors mode="Off"/> 
</system.web> 
<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above 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> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

</configuration> 

這是隻是自動生成的簡單web.config。我無法弄清楚爲什麼這個簡單的web服務方法不能通過瀏覽器或ajax訪問。通過WCFTestClient訪問時,同樣的方法返回結果。

任何輸入將不勝感激!謝謝。

回答

1

您需要將服務部分添加到您的web.config文件中。除非您告訴他,否則主機不知道您要使用webHttpBinding。下面

<services> 
    <service name="Service1"> 
    <endpoint address="" 
       binding="webHttpBinding" 
       contract="IService1" /> 
    </service> 
</services> 

鏈接提供了用於在IIS託管服務(與wsHttpBinding)的詳細說明。你只需要使用webHttpBinding,而不是wsHttpBinding - http://msdn.microsoft.com/en-us/library/ms733766.aspx

+0

如果我添加的服務部分的web.config文件,然後對測試方法的調用通過瀏覽器,我得到500「內部服務器」與錯誤錯誤消息由於合同不匹配(發件人和收件人之間的操作不匹配),或者在發件人和收件人之間的綁定/安全不匹配,錯誤消息「帶Action的消息」無法在接收方處理,原因可能是EndpointDispatcher中的ContractFilter不匹配。發件人和收件人檢查發件人和收件人是否有相同的合同和相同的綁定(包括安全要求,例如消息,傳輸,無)「 – user1081934

相關問題