Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务引用支持文件未更新_Wcf_Wcf Binding - Fatal编程技术网

WCF服务引用支持文件未更新

WCF服务引用支持文件未更新,wcf,wcf-binding,Wcf,Wcf Binding,我有一个VS2010解决方案,其中包含一个WCF服务项目和一个单元测试项目。单元测试项目具有对WCF服务的服务引用 WCF服务项目的Web.config将许多绑定属性设置为默认值以外的值: web.config:(特别注意maxBufferSize=“20000000”) 在检查时,我意识到单元测试项目的服务引用支持文件不包含我期望的值(即WCF服务的web.config中配置的值): 配置。svcinfo: (特别注意maxBufferSize=“65536”) 删除并重新创建服务引用

我有一个VS2010解决方案,其中包含一个WCF服务项目和一个单元测试项目。单元测试项目具有对WCF服务的服务引用

WCF服务项目的Web.config将许多绑定属性设置为默认值以外的值:

web.config:(特别注意maxBufferSize=“20000000”)


在检查时,我意识到单元测试项目的服务引用支持文件不包含我期望的值(即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">