我试图更新一些WSE代码以使用WCF,特别是我遇到了一个服务的问题。当我从WSDL生成我的代理类时,它创建的方法没有参数或返回类型。参数很容易修复 - 将自动生成的References.cs
文件保存为新文件,将参数添加到生成的接口和生成的客户端,并且它可以正常工作。使用Fiddler,我可以看到流量是预期的。
我发现非常令人烦恼的是,WCF似乎只是丢弃了响应有效负载。我可以看到它通过电线回来,但它似乎只是在WCF的深黑色缝隙中的某处消失了。没有错误或警告,只是消失了。
我的智慧在这里结束了。我非常感谢有关如何确定响应的去向的任何建议。
客户端中的方法(用于返回void
;我已将其设置为object[]
,希望我可以获得可以投射的内容):
public object[] getAddress(string user) {
return base.Channel.getAddress(user);
}
界面中的方法:
[System.ServiceModel.OperationContractAttribute(Action = "https://xxxxxx/Address#getAddress", ReplyAction = "*")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
object[] getAddress(string user);
原始XML响应(编辑)看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getAddressResponse xmlns="https://xxxxx/Address">
<ArrayOfAddress arrayType="xsd:Address[3]" soapenc:arrayType="xsd:anyType[3]" xsi:type="Array">
<Address>
<street xsi:type="xsd:string">3rd</street>
</Address>
<Address>
<street xsi:type="xsd:string">1st</street>
</Address>
<Address>
<street xsi:type="xsd:string">2nd</street>
</Address>
</ArrayOfAddress>
</getAddressResponse>
</soap:Body>
提前谢谢!
编辑:我无法解决此问题,此服务上只有几种方法,因此我最终只是使用WebClient手动与服务交互,绕过了WCF。答案 0 :(得分:0)
返回对象[]不会给你一些可以投射的东西。客户端上的WCF需要知道可能的具体类型以反序列化响应。我预计会有例外。
要解决此问题,您应该继续创建地址数据合同类。