1
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://ttdev.com/ss"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd"
name="SecureService" targetNamespace="http://ttdev.com/ss">
<wsp:Policy wsu:Id="p0">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
<wsp:Policy wsu:Id="p1">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
<wsp:Policy wsu:Id="p2">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
<wsdl:binding name="SecureServiceSOAP" type="tns:SecureService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="concat">
<wsp:PolicyReference URI="#p1" wsdl:required="true" />
<soap:operation soapAction="http://ttdev.com/ss/concat" />
<wsdl:input>
<soap:body parts="concatRequest" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body parts="concatResponse" use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SecureService">
<wsdl:port binding="tns:SecureServiceSOAP" name="SecureServiceSOAP">
<soap:address location="http://localhost:8080/axis2/services/SecureService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
这个WSDL包含一个政策部分和操作名称和标签WSP的URI属性的基础上的操作部分 所以:PolicyReference 我想取整个策略XML部分从这个WSDL复杂的LINQ查询从WSDL文件获取政策
<wsp:Policy wsu:Id="p1">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
可以有很多政策,但其ID与政策refence其操作的名字我通过,这项政策我想的URI值相匹配。
你可以帮我取得政策的XML部分。
当pOperationName变量CONCAT然后输出字符串的某一个合格值应如下:
<wsp:Policy wsu:Id="p1">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
使用下面的代码完成了(但此查询工作只有一个WSP:政策标签存在如何让它工作,即使多个WSP:策略标记在WSDL介绍)
private string GetPolicy()
{
XDocument wsdlDocument = XDocument.Load(_wsdlPath);
XName operationElementName = XName.Get("operation", "http://schemas.xmlsoap.org/wsdl/");
XName policyReferenceElementName = XName.Get("PolicyReference", "http://schemas.xmlsoap.org/ws/2004/09/policy");
XName policyElementName = XName.Get("Policy", "http://schemas.xmlsoap.org/ws/2004/09/policy");
XName idAttributeName = XName.Get("Id", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd");
var operationPolicy = from operation in wsdlDocument.Descendants(operationElementName)
where operation.Attribute("name").Value == _operationSelected //"concat"
from policyReference in operation.Descendants(policyReferenceElementName)
where policyReference.Attribute("URI").Value.StartsWith("#")
let uri = policyReference.Attribute("URI").Value.Substring(1)
from policy in wsdlDocument.Descendants(policyElementName)
where policy.Attribute(idAttributeName).Value == uri
select policy.ToString();
string temp = operationPolicy.FirstOrDefault();
return temp;
}
这个问题在[this one]之后仍然相关(http://stackoverflow.com/questions/8724333/fetching-xml-through-linq)? – 2012-01-04 20:41:35