使用 Postmen 或 SoapUI 测试 WCFService1 给出 400 Bad Request
Testing WCFService1 with Postmen or SoapUI gives 400 Bad Request
当我在 Visual Studio 2013 年创建一个名为 "WcfService1" 的全新 WCF 服务应用程序并立即 运行 它时,WCF 测试客户端完成的请求工作正常。不足为奇。
当我尝试在 REST/SOAP 客户端(如 Postman 或 SoapUI)中测试相同的初始应用程序时,我收到 400 Bad Request 错误。在像 Postman 这样的 REST 客户端中应该更改什么才能使对初始 VS 应用程序的请求正常工作?
除其他外,我测试了这些可能性:
1.初始 WCF 服务应用程序交付的源代码
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}
为了便于阅读,我不会粘贴整个项目的源代码。如果你喜欢,你可以通过在VS中创建一个新的WCF服务应用程序项目来生成它。
下面你会看到我是如何配置 Postman 的,它给出了 400 Bad Request:
2。从 WCF 测试客户端
复制的 Postman 中的原始 XML 请求
这个变体没有解决错误。源代码未动,同上。
3。在 GetData 操作上使用 WebInvokeAttribute 扩展的源代码
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/GetData")]
string GetData(int value);
这个添加没有解决错误。 Postman中的所有设置同上;当然在 URL.
中使用 /GetData
4. GetData操作的OperationContractAttribute extended
[OperationContract(Action = "http://www.jorritsteetskamp.nl/wcfservice1")]
string GetData(int value);
我尝试添加了 SOAPAction header 的 Postman,但它再次导致错误 400:
在 SO 上存在几个关于 WCF 服务和 400 错误请求错误的问题,但它们似乎都是特定于应用程序的,并且没有针对这种情况的解决方案。由于此问题发生在 Visual Studio 生成的初始应用程序中,并且在 WCF 测试客户端中工作,我找到了 post 这个问题的原因。
我的问题是:像 Postman 这样的 REST 客户端应该更改什么才能使对初始 VS 应用程序的请求正常工作?
如有任何帮助,我们将不胜感激。
- 案例 1:您发布的是 form-data 而不是您应该发布的 SOAP/XML.
- 案例 2:您缺少 SOAP 操作 header。
- 情况 3:请求似乎正常,但您可能没有配置 WebHttp 端点。
- 案例 4:服务 URL 不需要 GetData。
为了使其成为 REST 服务,您需要
- 使用 WebGet/WebInvoke
注释服务方法
- 配置 WebHttp 端点。
- 使用案例 3 中的请求。
当我在 Visual Studio 2013 年创建一个名为 "WcfService1" 的全新 WCF 服务应用程序并立即 运行 它时,WCF 测试客户端完成的请求工作正常。不足为奇。
当我尝试在 REST/SOAP 客户端(如 Postman 或 SoapUI)中测试相同的初始应用程序时,我收到 400 Bad Request 错误。在像 Postman 这样的 REST 客户端中应该更改什么才能使对初始 VS 应用程序的请求正常工作?
除其他外,我测试了这些可能性:
1.初始 WCF 服务应用程序交付的源代码
[ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); }
为了便于阅读,我不会粘贴整个项目的源代码。如果你喜欢,你可以通过在VS中创建一个新的WCF服务应用程序项目来生成它。
下面你会看到我是如何配置 Postman 的,它给出了 400 Bad Request:
2。从 WCF 测试客户端
复制的 Postman 中的原始 XML 请求这个变体没有解决错误。源代码未动,同上。
3。在 GetData 操作上使用 WebInvokeAttribute 扩展的源代码
[OperationContract] [WebInvoke(Method = "POST", UriTemplate = "/GetData")] string GetData(int value);
这个添加没有解决错误。 Postman中的所有设置同上;当然在 URL.
中使用 /GetData4. GetData操作的OperationContractAttribute extended
[OperationContract(Action = "http://www.jorritsteetskamp.nl/wcfservice1")] string GetData(int value);
我尝试添加了 SOAPAction header 的 Postman,但它再次导致错误 400:
在 SO 上存在几个关于 WCF 服务和 400 错误请求错误的问题,但它们似乎都是特定于应用程序的,并且没有针对这种情况的解决方案。由于此问题发生在 Visual Studio 生成的初始应用程序中,并且在 WCF 测试客户端中工作,我找到了 post 这个问题的原因。
我的问题是:像 Postman 这样的 REST 客户端应该更改什么才能使对初始 VS 应用程序的请求正常工作?
如有任何帮助,我们将不胜感激。
- 案例 1:您发布的是 form-data 而不是您应该发布的 SOAP/XML.
- 案例 2:您缺少 SOAP 操作 header。
- 情况 3:请求似乎正常,但您可能没有配置 WebHttp 端点。
- 案例 4:服务 URL 不需要 GetData。
为了使其成为 REST 服务,您需要
- 使用 WebGet/WebInvoke 注释服务方法
- 配置 WebHttp 端点。
- 使用案例 3 中的请求。