2015-05-19 106 views
1

當我在Visual Studio 2013中創建一個名爲「WcfService1」的全新WCF服務應用程序並立即運行它時,WCF Test Client完成的請求工作正常。不出所料。使用Postmen或SoapUI測試WCFService1會給出400錯誤請求

當我嘗試在Postman或SoapUI等REST/SOAP客戶端中測試相同的初始應用程序時,出現400錯誤請求錯誤。像Postman這樣的REST客戶端應該改變什麼來向最初的VS應用程序發出請求?

除其他我測試過這些可能性:如交付由最初的WCF服務應用程序

 

    [ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     string GetData(int value); 
    } 

爲了提高可讀性,我不會的源代碼從整個項目粘貼

1的源代碼。如果你願意,你可以通過在VS中創建一個新的WCF服務應用程序項目來生成它。

下面你看到的我是如何配置的郵遞員,它給400錯誤的請求:

enter image description here

2.郵差原始XML請求從WCF測試客戶端

enter image description here

複製

這個變體沒有解決這個錯誤。源代碼未改變,與上述相同。

3.源代碼WebInvokeAttribute擴展上的GetData操作

 

    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "/GetData")] 
    string GetData(int value); 

這除了沒有解決的錯誤。郵差中的所有設置都與上面相同;當然在URL中使用/ GetData。

4.的GetData操作OperationContractAttribute擴展

 

    [OperationContract(Action = "http://www.jorritsteetskamp.nl/wcfservice1")] 
    string GetData(int value); 

我試圖郵差與添加的SOAPAction頭,但同樣地導致錯誤400:

enter image description here

在SO存在幾個有關WCF服務和400錯誤請求錯誤的問題,但它們都看起來是特定於應用程序的,並且沒有針對此案例的解決方案。由於Visual Studio生成的初始應用程序出現此問題,並且在WCF Test Client中工作,所以我發現發佈此問題的原因。

我的問題是:像Postman這樣的REST客戶端應該如何改變以向最初的VS應用程序工作提出請求?

任何幫助將不勝感激。

回答

1
  • 案例1:您正在發佈表單數據,而不是您應該發佈SOAP/XML。
  • 情況2:您缺少SOAP Action標頭。
  • 案例3:請求似乎沒問題,但您可能沒有配置WebHttp端點。
  • 案例4:服務URL不需要GetData。

爲了讓它因爲你需要

  1. Annonate服務方法與WebGet/WebInvoke
  2. 配置WebHttp端點REST服務。
  3. 使用案例3的請求。
+1

感謝您的解釋,這正是我所需要的。以供將來參考:我的解決方案是將情況2和4結合起來。來自WCF Test Client的原始XML的Header部分應該由REST客戶端中真實的SOAPAction頭替換(案例4)。而且確實沒有GetData的URL。在這個解決方案中,似乎不需要配置WebHttp端點,因爲.NET的默認配置很好。 –