修复损坏的代理类

本文关键字:代理 损坏 | 更新日期: 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数据协定类。