6

当我使用参数 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()

公共类 Service1:System.Web.Services.WebService {

    [WebMethod(EnableSession=true)]
    [SoapDocumentMethod]

    public Order MyLiteralMethod([XmlElement("MyOrderID")] string orderId)
    {

       //logic
    }
}

提琴手请求头

Host: localhost:49033
Content-Type: text/xml; charset=utf-8
Content-Length: 369
SOAPAction: "http://tempuri.org/MyLiteralMethod"

提琴手请求正文

<?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] 传递参数。我认为这是特定于提琴手

问题已解决

似乎是提琴手的问题。进入工具->选项-> https ..删除了解密HTTPS流量..重新启动了提琴手。然后重新添加这些选项并重新启动。我不知道这个过程是否解决了问题,但我可以通过提琴手提出请求。

4

2 回答 2

25

我只是在旧的 ASMX 服务上遇到了同样的问题(这与 Fiddler 无关)。解决方案:

您正在使用 SOAP 协议调用 Web 服务。我猜你用来调用它的 URL 是:

http://yourserver/service.asmx/methodOfService

但是,当您对服务执行简单的 GET 或 POST 时(例如使用 AJAX 时),必须使用此 URL。使用 SOAP 时,您必须使用此 URL:

http://yourserver/service.asmx

没有方法名称,因为它包含在 SOAP 主体中。

于 2014-06-11T06:54:54.740 回答
0

Fiddler 在这里所做的并没有什么神奇之处。您最简单的方法是使用 Fiddler 捕获工作请求,然后使用比较功能将其与您从 Composer 选项卡发出的非工作请求进行比较。

您是否记得将 HTTP 动词设置为POST

如果删除字符集之前的空格,是否有变化?Content-Type: text/xml;charset=utf-8

于 2013-08-15T15:46:00.763 回答