wcf - 在设置WCF客户端和服务器时,配置文件的同步程度如何?

  显示原文与译文双语对照的内容
0 0

大多数WCF示例都展示了如何配置WCF客户端和服务器。 现在,如果在它们之间稍有差异,会发生什么? 我的意思是谁有最后一个词?

让我们以客户端配置为例:


<configuration>
<system.serviceModel>
 <bindings>
 <wsHttpBinding>
 <binding name="WSHttpBinding_ISampleService" closeTimeout="00:01:00"
 openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"
 bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
 maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
 messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
 allowCookies="false">
 <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
 maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
 <reliableSession ordered="true" inactivityTimeout="00:10:00"
 enabled="false"/>
 <security mode="Message">
 <transport clientCredentialType="None" proxyCredentialType="None"
 realm=""/>
 <message clientCredentialType="Windows" negotiateServiceCredential="true"
 algorithmSuite="Default" establishSecurityContext="true"/>
 </security>
 </binding>
 </wsHttpBinding>
 </bindings>
 <client>
 <endpoint address="http://localhost:8080/SampleService" binding="wsHttpBinding"
 bindingConfiguration="WSHttpBinding_ISampleService" contract="ISampleService"
 name="WSHttpBinding_ISampleService">
 </endpoint>
 </client>
</system.serviceModel>

通常服务器端在它的公开的服务器上配置了完全相同的绑定。

但是,如果在服务器端定义了 openTimeout = 00: 00: 30会发生什么。 什么是超时时间? 谁赢了我对所有的参数都有同样的问题。

整件事似乎是一个大混乱,如何你能告诉,每个元素的配置( 绑定,客户端,服务,行为,等等 ) 和他们所有的细节,需要哪些参数和( 客户端或者服务器) 哪一边?

似乎你可以使用服务器端和客户端的所有超时参数来定义整个绑定,只需将所需的最低配置设置为接受服务器中的所有参数即可。 但是,考虑到服务器的深度配置,客户机上所需的最低参数是什么?

使用WCF配置客户端和服务器时,有关配置每个元素的参数的最佳做法是: 绑定,服务,客户端/终结点和行为?

在客户端和服务器之间定义冲突参数时,WCF如何处理?

时间: 原作者:

0 0

为了满足你对我以前的回答中的请求的需求,我试图提出如何为配置创建( 修改) server-和客户端的方法。 这是基于理论我读( 书籍,博客), 东西我已经学会了在 Juval WCF Master Class lowy,和相当多的实践经验与几个大型服务实现项目——这是在一个地方,在网上或一本书。 这里是:

我基本上是从零开始的。 首先考虑你的服务:

  • 你的服务位于哪个地址?
  • 你希望支持什么绑定?

最简单的方案:单个服务,单个端点,basicHttpBinding,所有默认值

服务配置:


<system.serviceModel>
 <services>
 <service name="YourNamespace.YourServiceClass">
 <endpoint name="Default"
 address="http://YourServer/SomeVirtualDirectory/YourService.svc"
 binding="basicHttpBinding"
 contract="YourNamespace.IYourServiceContract"/>
 </service>
 </services>
</system.serviceModel>

相应的客户端配置:


<system.serviceModel>
 <client name="Default">
 <endpoint name="Default"
 address="http://YourServer/SomeVirtualDirectory/YourService.svc"
 binding="basicHttpBinding"
 contract="YourClientProxyNamespace.IYourServiceContract"/>
 </client>
</system.serviceModel>

如果你真的必须这样做的话,那么你只会改变一些东西 ! 及其他: 从来没有,让 Visual Studio ( 添加服务引用) 或者 svcutil.exe screw你的配置 ! 像你眼睛的苹果一样保护它 !

然后:如果 比如 你的数据传输花费的时间比默认超时 1分钟多,那么在服务端和客户端上更改一个设置。 通过定义自定义绑定配置并从你的端点中引用它来做到这一点- 英镑但只改变- 不更多 ! 保留其他所有内容,默认值为。 除非你绝对必须( 知道你在做什么你为什么要这么做),否则不要改变任何东西。

请注意:客户端的sendTimeout ( 发送整个消息之前所允许的时间) 服务器上对应于 receiveTimeout ——允许的时间整个消息进来(见这优秀博客msdn论坛线程更多信息)

服务配置:


 <system.serviceModel>
 <bindings>
 <basicHttpBinding>
 <binding name="ExtendedTimeout"
 receiveTimeout="00:05:00"/>
 </basicHttpBinding>
 </bindings>
 <services>
 <service name="YourNamespace.YourServiceClass">
 <endpoint name="Default"
 address="http://YourServer/SomeVirtualDirectory/YourService.svc"
 binding="basicHttpBinding"
 bindingConfiguration="ExtendedTimeout"
 contract="YourNamespace.IYourServiceContract"/>
 </service>
 </services>
 </system.serviceModel>

相应的客户端配置:


<system.serviceModel>
 <bindings>
 <basicHttpBinding>
 <binding name="ExtendedTimeout"
 sendTimeout="00:05:00"/>
 </basicHttpBinding>
 </bindings>
 <client name="Default">
 <endpoint name="Default"
 address="http://YourServer/SomeVirtualDirectory/YourService.svc"
 binding="basicHttpBinding"
 bindingConfiguration="ExtendedTimeout"
 contract="YourClientProxyNamespace.IYourServiceContract"/>
 </client>
</system.serviceModel>

如果你需要其他更改,如服务端的多个端点,或者像 bypassProxyOnLocal 这样的本地设置,请调整你的配置,使你的配置更适合你的配置,请小心地进行配置。

原作者:
0 0

如果一个给定的超时关于最后的一个事情,那么在客户端和服务器上,这两个值不 MATCH,那么在服务器上定义的超时"wins"无论是在服务器上还是客户端定义的。

像地址,绑定 等等 的其他东西必须 MATCH - 否则没有任何通信可能。

服务器设置的好处是,你可以为单个服务定义多个端点,与不同的选项和绑定,客户端可以"选取并选择"端点连接。

但是,一旦为连接选择了一个服务端点,那么绑定。协议。安全性。可靠性等等的设置必须完全正确。

此外,Visual Studio Add Service Reference 或者 svcutil.exe 命令行 工具生成的默认配置都是灾难性错误- 它们包含的设置太多,以至于所有反映默认值的设置都是很难理解的,而什么是 NOT 。

在这方面,我建议观看DotNet电视节目 #122: Castro在极端的WCF 中,在其中很好地展示了在手工创建这些配置时,如何手动创建这些配置,然后你完全理解了你所做的 ! 强烈推荐 !

原作者:
...