我有一个包含WCF服务项目和单元测试项目的VS 2010解决方案。单元测试项目具有对WCF服务的服务引用。
WCF服务项目的Web.config将许多绑定属性设置为非默认值:
web.config:(特别注意maxBufferSize =“ 20000000 ”)
<basicHttpBinding>
<binding name="basicHttpBindingConfig" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</basicHttpBinding>
在检查this issue时,我意识到单元测试项目的服务引用支持文件不包含我期望的值(即在WCF服务的web.config中配置的值):
configuration.svcinfo: (特别注意 maxBufferSize =“ 65536 ”)
<binding hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" messageEncoding="Text" name="BasicHttpBinding_IBishopService" textEncoding="utf-8" transferMode="Buffered">
<readerQuotas maxArrayLength="16384" maxBytesPerRead="4096" maxDepth="32" maxNameTableCharCount="16384" maxStringContentLength="8192" />
<security mode="None">
<message algorithmSuite="Default" clientCredentialType="UserName" />
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>
删除并重新创建服务引用或更新服务引用会重新创建文件,但我仍然会得到相同的值。
为什么?
更新
以下是客户端的 app.config
<binding name="BasicHttpBinding_IMyService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="200000000" maxBufferPoolSize="200000000" maxReceivedMessageSize="200000000"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="200000000" maxArrayLength="200000000"
maxBytesPerRead="200000000" maxNameTableCharCount="200000000" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
答案 0 :(得分:0)
这是正确的行为。绑定中包含的某些信息仅特定于配置的一侧,并且客户端和服务器都可以使用完全不同的值。此外,这些值是对拒绝服务附加的防御,因此服务不希望公开显示它们。
这些值仅影响传入消息的处理,因此服务配置它将如何处理传入请求,并且客户端配置它将如何处理传入的响应。请求和响应可以具有不同的特征和不同的配置。如果服务始终仅接收少量KB请求并返回1MB响应,则无需将服务配置为接受1MB请求。
顺便说一下。这是与一般Web服务无关的WCF特定功能,因此没有标准化的方法来在WSDL中描述它。
答案 1 :(得分:0)
这里有同样的问题,半天后没有解决配置文件的问题...改变自动生成的文件通常是不受欢迎的,所以我的感觉说“必须有一个更好的方式,丹尼斯”。
更新:我通过删除绑定配置中的name属性来修复问题。 所以你当前的web.config看起来像这样
<basicHttpBinding>
<binding name="basicHttpBindingConfig" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</basicHttpBinding>
会变成
<basicHttpBinding>
<binding maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</basicHttpBinding>
我认为你只需要在客户端这样做。通过删除name属性,您实际上可以更改应用程序的默认basicHttpBinding配置,据我所知。此解决方案的致谢here。
另一个更新:如果您正确命名服务配置(包括命名空间),它将获取绑定配置。而不是
<service name="ServiceName">
你需要
<service name="My.Namespace.ServiceName">