我想使用数据库中的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