修复损坏的代理类
本文关键字:代理 损坏 | 更新日期: 2023-09-27 18:29:51
我正在尝试更新一些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。
返回object[]不会给您一些可以强制转换的东西。客户端上的WCF需要知道反序列化响应的可能具体类型。不过我还是希望有个例外。
要解决此问题,您应该继续创建Address数据协定类。