我有一个应用程序,调用了一个已经编写在WebSphere中的J2EE SOAP服务。
我创建了两个控制台应用程序——一个使用传统的Web服务引用该服务,另一个使用Service Reference引用该服务。
在这两种情况下,Visual Studio都会创建代理类和适当的配置条目。
在Service Reference控制台应用程序中,我可以看到更多的配置选项,而在Web服务应用程序中则没有。特别是,我可以设置最大消息大小等。
实际上,为了使Service Reference控制台应用程序正常工作,我不得不增加默认消息大小,以便在其中一个方法调用中获取所有发送的数据。
以下是Service Reference应用程序中的配置:
<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>
这种方法更简单,但缺少许多Service References提供的选项。
实际调用服务的代码在两种情况下几乎相同。
然而,回答你的问题,我认为坚持当前的做法很重要。微软通过强制你通过一些对话框级别才能添加旧式Web Reference(至少在VS2008中)来明确这一点。
我认为WCF方式更加灵活,并且配置对于正在发生的事情更具描述性。
此外,随着您向应用程序添加新的WCF组件,保持配置设置一致将是不错的选择,而不是在旧式和WCF之间混合匹配。