我想使用数据库中的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)
有人可以给我一个如何处理这个问题的提示吗?
答案 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