c# - 什么作为 Web 引用 (ASMX) 应该作为服务引用 (WCF),对吗?

标签 c# wcf web-services soap

我最近注意到使用服务引用 (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 Reference 时,客户端的调用如下:

var client = new RxNavAPI.DBManagerService();

当使用服务引用时,它就像:

var client = new RxNavAPI.DBManagerClient();

编辑:我收到的错误是

System.InvalidOperationException : "RPC Message getProprietaryInformationRequest1 in operation getProprietaryInformation1 has an invalid body name getProprietaryInformation. It must be getProprietaryInformation1"

最佳答案

太棒了! @John Saunders 无处不在。 这与 5 年前注意到的问题相同。 WCF: Svcutil generates invalid client proxy, Apache AXIS Web Service, overload operations

现在我遇到了同样的问题,但仍然没有解决办法,只有解决方法。

关于c# - 什么作为 Web 引用 (ASMX) 应该作为服务引用 (WCF),对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21634153/

相关文章:

c# - C#中不断切换动态数据类型性能

C#/ASP.NET 在 PDF 中创建可呈现的发票

c# - 'System.ComponentModel.PropertyChangedEventHandler' 不能派生自特殊类 'System.MulticastDelegate'

c# - 如何创建仅在手动指定时运行的单元测试?

c# - 从 NHibernate 调用存储过程并检索 @@ROWCOUNT

javascript - RESTful API 及相关资源

.net - 将 Azure 网站连接到本地 WCF 服务

php - 如何在 Zend Framework 中创建 Web 服务?

java - 在 Java 中调用安全的 Web 服务

web-services - 如何使用 WCF 连接 Apple 的 GSX NewGeneration Web 服务?