代码之家  ›  专栏  ›  技术社区  ›  chillitom Cee McSharpface

Visual Studio/SOAP-“添加服务引用”与“添加Web服务引用”

  •  17
  • chillitom Cee McSharpface  · 技术社区  · 15 年前

    我发现我可以将计划使用的SOAP/WSDL服务作为“Web服务引用”(System.Web.Services)或“服务引用”(System.ServiceModel/WCF)导入到解决方案中。

    3 回复  |  直到 11 年前
        1
  •  20
  •   marc_s HarisH Sharma    13 年前

    最好也是最有用的方法就是使用 Add Service Reference

    Add Web Reference 是“旧式”ASMX/ASP.NET Web服务的做事方式。

    • 它更新了,将来将得到支持(ASMX即将推出);如果你现在就学会了,你就不必等到ASMX肯定不见了以后再学了
    • 它在各个方面都提供了更大的灵活性
    • WCF提供了更多的安全性和其他设置,使用起来更加强大

        2
  •  6
  •   Tad Donaghe    15 年前

    我有一个应用程序正在调用一个用J2EE编写并托管在WebSphere中的现有SOAP服务。

    以下是服务参考应用程序中的配置:

    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="ClaimSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
                        receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                        maxBufferSize="65536000" maxBufferPoolSize="524288" maxReceivedMessageSize="65536000"
                        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                        useDefaultWebProxy="true">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        <security mode="None">
                            <transport clientCredentialType="None" proxyCredentialType="None"
                                realm="" />
                            <message clientCredentialType="UserName" algorithmSuite="Default" />
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://urlgoeshere/ClaimService"
                    binding="basicHttpBinding" bindingConfiguration="ClaimSoapBinding"
                    contract="ClaimService.Claim" name="ClaimService" />
            </client>
        </system.serviceModel>
    </configuration>
    

    在我的老式Web服务控制台应用程序中,我根本不需要改变配置就可以恢复发送回来的庞大数据集。其配置如下所示:

    <configuration>
        <configSections>
            <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="ServiceTesterOldSchool.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <applicationSettings>
            <ServiceTesterOldSchool.Properties.Settings>
                <setting name="ServiceTesterOldSchool_ClaimService_ClaimService"
                    serializeAs="String">
                    <value>http://urlgoeshere/ClaimService</value>
                </setting>
            </ServiceTesterOldSchool.Properties.Settings>
        </applicationSettings>
    </configuration>
    

    在这两种情况下,调用服务的实际代码几乎相同。

    我认为WCF的方式更灵活,配置更能描述正在发生的事情。

    此外,当您向应用程序中添加新的WCF组件时,保持配置设置的一致性将是一件好事,而不是在老式和WCF之间进行混合和匹配。

        3
  •  3
  •   Scott Dorman    15 年前

    我认为其中一个区别在于服务的自动生成代理代码。如果使用服务引用,应用程序将需要WCF层进行通信。这通常不是问题,但如果您正在编写将在其他平台(如Mono)上运行的代码,您将希望使用web服务引用(因为Mono还不支持WCF)