0

ASP.NET によって .svc ファイルでホストされている WCF Web サービスがあります。.svc ファイルには次の構成が含まれています。

<%@ ServiceHost Language="C#" Debug="true" Service="assembly.IPriceListProvider,  assembly" Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" %>

web.config には、WCF の構成が含まれています。バインディング構成は次のとおりです。

<binding name="basicHttpBinding_PriceListProvider" maxBufferSize="10485760"
  maxReceivedMessageSize="10485760">
  <readerQuotas maxArrayLength="16384000" />
</binding>

サービスをテストするには、.svc ファイルをクリックして F5 をクリックします。WCF テスト クライアントが開きます。しかし、構成が変更されました。私が明示的に定義した値には、デフォルト値があります。

 <binding name="basicHttpBindingEndPoint_PriceListProvider" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                **maxBufferSize="65536"** maxBufferPoolSize="524288" **maxReceivedMessageSize="65536"**
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" **maxArrayLength="16384"**
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>

構成が変更されるのはなぜですか? 元の値を保持するにはどうすればよいですか?

簡素化された .svc 構成について聞いたことがあります。web.config で明示的に指定しなくても、.svc の既定のバインドが構成されます。それは本当ですか?

4

1 に答える 1

0

maxBufferSize と maxReceivedMessageSize の値は、サービスによって公開された WSDL ファイルには反映されません。そのため、wcf テスト クライアントはそれらを取得できず、デフォルト値を取ります。

wcf テスト クライアントを起動するたびに、SvcConfigEditor を使用して値を変更できます。そのため、wcf テスト クライアントで構成ファイルを右クリックし、バインディングを探します。ただし、次にクライアントを起動すると、変更は失われます。

次の例に示すように、自己記述クライアントでサービスをテストし、そこに値を設定することもできます。

BasicHttpBinding binding= new BasicHttpBinding();
binding.MaxRecievedMessageSize = yourValue;
EndpointAddress endpointAddress = new EndpointAddress("the address");

ClientForContract client= new ClientForContract (binding,endpointAddress);
client.TheMethod();
client.Close(); 

お役に立てれば!

于 2013-07-10T12:52:42.257 に答える