我最近注意到使用服务引用(WCF)会导致普通的旧SOAP API出现问题。我认为更新的改进方法是使用服务参考,因为WCF更灵活,更现代。任何人都可以在VS2013中检测我如何使用WCF工作吗?
这是一个简单的控制台应用程序试图使用RxNav(免费)api
URL: http://mor.nlm.nih.gov/axis/services/RxNormDBService
在解决方案中添加“服务参考”后,我输入了以下代码:
Program.cs的
static void Main(string[] args)
{
var client = new RxNavAPI.DBManagerClient();
try
{
var matches = client.getDrugs("aspirin");
foreach (var conceptGroup in matches)
{
foreach (var concept in conceptGroup.rxConcept)
{
Console.WriteLine(String.Format("Name: {0}, Syn: {1}", concept.STR, concept.SY));
}
}
client.close();
}
catch (TimeoutException ex)
{
Console.WriteLine("Timeout occurred while accessing RxNav API");
Console.WriteLine(ex.Message);
throw;
}
}
的App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="RxNormDBServiceSoapBinding" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://mor.nlm.nih.gov/axis/services/RxNormDBService"
binding="basicHttpBinding" bindingConfiguration="RxNormDBServiceSoapBinding"
contract="RxNavAPI.DBManager" name="RxNormDBService" />
</client>
</system.serviceModel>
</configuration>
我注意到的一件事是,当添加为 Web引用时,客户端被称为:
var client = new RxNavAPI.DBManagerService();
使用服务参考时,它就像:
var client = new RxNavAPI.DBManagerClient();
编辑:我收到的错误是
System.InvalidOperationException:“RPC Message getProprietaryInformationRequest1正在运行中 getProprietaryInformation1具有无效的正文名称 getProprietaryInformation。它必须是getProprietaryInformation1“
答案 0 :(得分:0)
真棒! @John Saunders到处回答。 这是5年前提到的同一问题。 WCF: Svcutil generates invalid client proxy, Apache AXIS Web Service, overload operations
现在我遇到了同样的问题,仍然没有解决方法,只有解决方法。