gil*_*rpa 6 vb.net asp.net soap web-services soap-client
我正在使用SoapUI来测试将由Java客户端应用程序使用的.Net Web服务.
当我将我的Web服务连接到SoapUI但更新WSDL位置并调用其中一个预设测试脚本时,Web服务失败并显示以下代码
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: urn:mycode:us:gu:das:supplierengagement:v02:SupplierEngagement:/AppointSupplier.
at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
</faultstring>
<detail/>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
从上面的错误可以看出,问题在于SOAPAction参数有一个额外的正斜杠.
我在类上使用以下属性:
<WebService(Namespace:= "urn:mycode:us:gu:das:supplierengagement:v02:SupplierEngagement:AppointSupplier")>
Run Code Online (Sandbox Code Playgroud)
以及方法调用的以下属性:
<WebMethod(MessageName:="appointSupplierRq")>
Run Code Online (Sandbox Code Playgroud)
从这些,.Net正在添加正斜杠.
必须可以删除自动生成的正斜杠.
通过检查代码、创建模拟示例等,我没有看到问题。是的,正如您在帖子中提到的那样,我确实看到了额外的正斜杠,但这是设计使然。这就是 ASMX 服务记录类中要执行的方法的方式。
现在,从您的 SOAP 消息和您的WebService\WebMethod属性来看,有些内容不同步。您的 SOAP 标头操作应该是
urn:mycode:us:gu:das:supplierengagement:v02:SupplierEngagement:AppointSupplier/appointSupplierReq
不是
urn:mycode:us:gu:das:supplierengagement:v02:SupplierEngagement:/AppointSupplier
这让我相信您还没有将 SOAP UI 项目更新为新生成的 WSDL。尝试在 SOAP UI 中创建一个新项目,指向 ASMX Web 服务的 WSDL 文件,例如。
http://<web host>/SupplierEngagement.asmx?wsdl
并运行测试方法。如果这不能解决问题,请发布(作为编辑)SupplierEngagement asmx 文件的完整类(您可以省略方法内容),因为我们只对完整设置真正感兴趣。