PHP-client采用我的WCF服务的WSDL。 Thare是两种方法(例如) - GetEntityTypeList()和GetPermissions(...)。 PHP客户端发送两个SOAP请求。
对于GetEntityTypeList():
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.mywork.com/BusinessEntity" xmlns:ns2="http://www.mywork.com">
<SOAP-ENV:Header>
<ApplicationServer>
<SessionId>25872680517</SessionId>
</ApplicationServer>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:GetEntityTypeList/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
对于GetPermissions(...):
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.mywork.com/BusinessEntity" xmlns:ns2="http://www.mywork.com">
<SOAP-ENV:Header>
<ApplicationServer>
<SessionId>25872680517</SessionId>
</ApplicationServer>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:GetPermissions>
<ns1:type>1</ns1:type>
<ns1:id>1</ns1:id>
</ns1:GetPermissions>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
然后WCF服务器捕获第一个请求:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.mywork.com/BusinessEntity" xmlns:ns2="http://www.mywork.com">
<SOAP-ENV:Header>
<ApplicationServer xmlns="http://www.mywork.com/">
<SessionId>25872680517</SessionId>
</ApplicationServer>
<To SOAP-ENV:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://10.128.240.23:55564/BusinessEntityServer/IEntityType</To>
<Action SOAP-ENV:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.mywork.com/BusinessEntity/IEntityType/GetEntityTypeList</Action>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:GetEntityTypeList />
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
如您所见,还有两个额外的块 - 到和操作。并且第一个请求正常。 但第二个请求没有到达服务器。并且PHP客户端捕获异常:
由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有操作“http://www.mywork.com/BusinessEntity/IPermissionEx/GetPermissions”的消息。这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配。检查发件人和收件人是否具有相同的合同和相同的约束(包括安全要求,例如邮件,传输,无)。
为什么?
如有必要,我将展示WSDL。