当我使用参数orderid调用我的Soap ASMX服务时,它失败并说。有什么想法吗?
System.InvalidOperationException: Request format is invalid: text/xml; charset=utf-8.
at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
public class Service1:System.Web.Services.WebService {
[WebMethod(EnableSession=true)] [SoapDocumentMethod] public Order MyLiteralMethod([XmlElement("MyOrderID")] string orderId) { //logic } }
FIDDLER REQUEST HEADER
Host: localhost:49033
Content-Type: text/xml; charset=utf-8
Content-Length: 369
SOAPAction: "http://tempuri.org/MyLiteralMethod"
FIDDLER REQUEST BODY
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<MyLiteralMethod xmlns="http://tempuri.org/">
<MyOrderID>sdasd</MyOrderID>
</MyLiteralMethod>
</soap:Body>
</soap:Envelope>
进一步的结果 我可以从其他Web调试代理工具[STORM]调用服务并传递参数。我认为这是fiddler特有的
问题已解决
似乎与fiddler的问题.went into tools-&gt; options-&gt; https ..删除解密HTTPs流量..重新启动的fiddler。然后重新添加这些选项并重新启动。我不知道这个过程是否解决了这个问题,但我可以通过提琴手提出请求。
答案 0 :(得分:16)
我在旧的ASMX服务中遇到了同样的问题(这与Fiddler没有任何关系)。解决方案:
您正在使用SOAP协议调用Web服务。我猜你用来调用它的网址是:
http://yourserver/service.asmx/methodOfService
但是,当您对服务执行简单的GET或POST时(例如,使用AJAX时),必须使用此URL。 使用SOAP时,必须使用以下URL:
http://yourserver/service.asmx
没有方法名称,因为它包含在SOAP正文中。
答案 1 :(得分:0)
Fiddler在这里做的并不神奇。最简单的方法是使用Fiddler捕获工作请求,然后使用比较功能将其与您从Composer选项卡发出的非工作请求进行比较。
您是否记得将HTTP动词设置为POST
?
如果删除charset之前的空格,是否有更改? Content-Type: text/xml;charset=utf-8