WCF最重要的是服务端的配置,客户端的配置大多根据服务端的配置不同而相应地改变。客户端的配置主要包含两个部分:
一个是导出的服务端Binding配置,
另一个是Client配置节点。
客户端配置示例如下:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ClassName" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="6553600" maxReceivedMessageSize="6553600" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="1638400"
maxBytesPerRead="409600" maxNameTableCharCount="1638400" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/WcfService/ServiceName/"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ClassName"
contract="Services.IService" name="WSHttpBinding_ClassName">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
</client>
</system.serviceModel>
其实,这两个配置节点在添加服务引用时会自动根据服务端的信息生成,大多数时候不需要客户端进行修改。需要注意的是,如果服务端配置了多个endpoint,那么客户端只能获得当前使用的endpoint的信息,需要手动添加其他endpoint信息。另外,导出的Bindings配置节中的信息比较多,VS自动把服务端配置信息的默认值也加入了配置文件