我为Adobe Flex客户端提供了.net 2(ASMX)Web服务。大多数服务方法返回XML并且一切正常,但是我的SaveChanges()
方法接受Xml返回一个布尔值。每当调用此方法时,它只返回100-Continue标头到客户端,没有结果,Flex等待(可能是超时)然后认为它失败并启动错误处理程序。
服务中的断点显示在达到服务方法的主体之前发送了100-Continue消息(正如预期的那样),然后该方法很好地转到return语句,但客户端没有收到进一步的响应。
我已经设置Membrane来嗅探客户端和服务之间的肥皂消息,它也看不到服务的响应,但也看不到添加的“Expects:100-Continue”似乎报告分配的请求。
编辑:
什么可以阻止在到达return语句后发送响应消息?
我没有注意到来自任何其他服务方法的100-continue消息,从我读到的这是HTTP说“请等待实际结果”。有没有办法在服务中禁用它,只是发送结果?
服务方式:
[WebMethod]
public bool saveTemplateChanges( int id, string planTitle, string xml )
{
using ( var spd = SeatPlanDb.Connect() ) // <= HTTP/1.1 100 CONTINUE is sent before this breakpoint
{
var templateChangesXml = this.CalculateDifferences( id, xml, "template" );
spd.UpdateTemplateXml( templateChangesXml );
spd.RunTemplateSeatplanFixups( id, planTitle );
}
return ( true ); // <= breakpoint reached
}
请求:
POST /Service.asmx HTTP/1.1
Host: localhost:58357
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Content-type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/saveTemplateChanges"
Content-length: 12073
X-Forwarded-For: 127.0.0.1
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<tns:saveTemplateChanges xmlns:tns="http://tempuri.org/">
<tns:id>100249</tns:id>
<tns:planTitle>untitled</tns:planTitle>
<tns:xml><performance ID="100249"><!-- Valid XML --></performance></tns:xml>
</tns:saveTemplateChanges>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>