修复损坏的代理类

时间:2014-11-10 21:22:47

标签: c# web-services wcf

我试图更新一些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。

1 个答案:

答案 0 :(得分:0)

返回对象[]不会给你一些可以投射的东西。客户端上的WCF需要知道可能的具体类型以反序列化响应。我预计会有例外。

要解决此问题,您应该继续创建地址数据合同类。