我有一个用于 Adobe Flex 客户端的 .net 2 (ASMX) Web 服务。大多数服务方法返回 XML 并且一切正常,但是我的SaveChanges()
方法接受 Xml 来返回布尔值。每当调用此方法时,它只会向客户端返回 100-Continue 标头并且没有结果,Flex 等待(可能是超时)然后认为它失败并启动错误处理程序。
服务中的断点显示 100-Continue 消息在到达服务方法的主体之前发送(如预期的那样),然后该方法很好地到达 return 语句,但客户端没有收到进一步的响应。
我已经设置了Membrane来嗅探客户端和服务之间的肥皂消息,它也看不到来自服务的响应,而且在似乎报告的请求中也看不到添加的“期望:100-继续”分配。
编辑 :
什么可以阻止在达到 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>