如何使用自动生成的代理类?

时间:2013-12-06 22:01:00

标签: c# soap wsdl asmx proxy-classes

我想使用数据库中的Web服务来收集信息。现在,我实现了Web服务,通​​过wsdl.exe将其转换为代理类,但我对结果略感不满。调用该类的常规方法是新对象 - >方法 - >参数 - >幸福。这个东西只包含部分类,需要奇怪的参数。我甚至不确定我是否有正确的方法来获取所需信息。

这似乎是必要的方法:

public UniProtId2DomainIdsRecordType[] UniProtId2DomainIds   (UniProtId2DomainIdsRequestRecordType UniProtId2DomainIdsRequestRecord)
{
    object[] results = this.Invoke("UniProtId2DomainIds", new object[] {
                UniProtId2DomainIdsRequestRecord});
    return ((UniProtId2DomainIdsRecordType[])(results[0]));
}

这似乎是所需的课程之一:

public partial class UniProtId2DomainIdsRequestRecordType

{

private string uniprot_accField;

/// <remarks/>
public string uniprot_acc
{
    get
    {
        return this.uniprot_accField;
    }
    set
    {
        this.uniprot_accField = value;
    }
}

}

(这是整个班级,由wsdl.exe生成 - &gt; https://www.dropbox.com/s/yg909ibdq02js5a/GetCath.cs

但是一旦我尝试使用它,因为我认为它应该有用......好吧......我的实验(没有一个工作):

            UniProtId2DomainIdsRequestRecordType Uni2Cath = new UniProtId2DomainIdsRequestRecordType();
        Uni2Cath.uniprot_acc = "P0A7N9";
        UniProtId2DomainIdsRecordType[] UniProtId2DomainIds;
        UniProtId2DomainIdsRecordType test = new UniProtId2DomainIdsRecordType();
        test.uniprot_acc = "P0A7N9";
        UniProtId2DomainIdsRecordType[] UniProtId2DomainIds(test);

我只需要将像P0A7N9这样的字符串传递给服务器。

(对此网络服务的引用:http://api.cathdb.info/api/soap/dataservices/wsdl#op.o159501052

有人可以给我一个如何处理这个问题的提示吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是将此Web服务Service Reference添加到您的项目中。然后你可以调用不同的方法。将其用作地址:http://api.cathdb.info/api/soap/dataservices/wsdl

using (var ser = new DataServicesPortTypeClient())
{
    var results = ser.UniProtId2DomainIds(new UniProtId2DomainIdsRequestRecordType
    {
        uniprot_acc = "P0A7N9"
    });

    if (results != null)
    {
        var geneName = results.gene_name;
        var speciesName = results.species_name;
    }
}

如果要使用生成的类,请执行以下操作:

using (var service = new DataServices())
{
    var results = service.UniProtId2DomainIds(new UniProtId2DomainIdsRequestRecordType
    {
        uniprot_acc = "P0A7N9"
    });

    if (results != null && results.Length >0)
    {
        var geneName = results[0].gene_name;
        var speciesName = results[0].species_name;
    }
}

正如John在评论中所说,ASMX和wsdl.exe是不推荐使用的技术。您应该使用服务参考和svcutil.exe