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



我想使用数据库中的web服务来收集信息。现在,我实现了web服务,通过wsdl.exe将其变成了一个代理类,但我对结果有点恼火。调用该类的正常方式是new object->method->parameters->happy。这个东西只包含分部类,并且需要奇怪的参数。我甚至不确定我是否找到了获得所需信息的正确方法。

这似乎是需要的方法:

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->生成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)

有人能给我一个如何处理的提示吗?

最简单的方法是将此web服务作为服务引用添加到您的项目中。然后您可以调用不同的方法。使用此地址: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

最新更新