WCF服务引用支持文件未更新
我有一个VS2010解决方案,其中包含一个WCF服务项目和一个单元测试项目。单元测试项目具有对WCF服务的服务引用 WCF服务项目的Web.config将许多绑定属性设置为默认值以外的值: web.config:(特别注意maxBufferSize=“20000000”)WCF服务引用支持文件未更新,wcf,wcf-binding,Wcf,Wcf Binding,我有一个VS2010解决方案,其中包含一个WCF服务项目和一个单元测试项目。单元测试项目具有对WCF服务的服务引用 WCF服务项目的Web.config将许多绑定属性设置为默认值以外的值: web.config:(特别注意maxBufferSize=“20000000”) 在检查时,我意识到单元测试项目的服务引用支持文件不包含我期望的值(即WCF服务的web.config中配置的值): 配置。svcinfo: (特别注意maxBufferSize=“65536”) 删除并重新创建服务引用
在检查时,我意识到单元测试项目的服务引用支持文件不包含我期望的值(即WCF服务的web.config中配置的值):
配置。svcinfo:
(特别注意maxBufferSize=“65536”)
删除并重新创建服务引用或更新服务引用会重新创建文件,但最终还是得到相同的值
为什么?
更新
下面是客户端的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>
这是正确的行为。绑定中包含的一些信息只针对配置的一方,客户端和服务器都可以使用完全不同的值。此外,这些值是对拒绝服务的防御,因此服务不希望公开显示它们 这些值只影响传入消息的处理,所以服务配置如何处理传入请求,客户端配置如何处理传入响应。请求和响应可以具有不同的特征和不同的配置。如果服务总是只接收很少的KB请求并返回1MB响应,则无需将其配置为接受1MB请求
顺便说一句,这是WCF特有的功能,与一般的web服务无关,因此在WSDL中没有标准化的方法来描述这一点。这里也有同样的问题,在半天的配置文件混乱之后也没有解决方案。。。更改自动生成的文件通常是不受欢迎的,所以我的感觉是“必须有更好的方法,丹尼斯” 更新:我通过删除绑定配置中的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配置。此解决方案的积分
另一个更新:如果正确命名服务配置(包括名称空间),它将选择绑定配置。所以不是
<service name="ServiceName">
你需要
<service name="My.Namespace.ServiceName">
如果这是正确的行为,那么更改这些值的正确步骤是什么?正在应用的默认(?)值不适用于我的特定应用程序(这就是我开始研究设置的原因)。您将根据需要修改客户端上的值。我已经在app.config中修改了客户端的设置,但这些设置也没有反映在生成的文件中,我得到一个与设置太小有关的错误。问题中添加了App.config。如果您的客户端是直接可执行的或网站/web应用程序项目,则在每次引用更新后,您必须手动设置这些值。如果客户机是类库,则仍然可以在executalbe/web应用程序的主配置中维护正确的值。在这种情况下,您必须手动同步更新服务引用所反映的其他更改。在何处更新?在生成的文件中?客户端的My app.config和服务器端的web.config都具有所需的值,只有生成的支持文件具有错误的值。当我从中删除name
属性时,如果它抱怨找不到命名绑定,则表示它正在提取该绑定并有效地使用该配置。客户端和服务器绑定配置现在是否相同?你能用这两种服务的配置更新你的帖子吗?
<service name="ServiceName">
<service name="My.Namespace.ServiceName">