2015-05-19 85 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的默认配置很好。 –