Не удается получить конфигурацию хоста WCF для клиента с добавлением ссылки на службу - PullRequest
0 голосов
/ 14 марта 2012

Я подготовил хост службы wcf и настроил на него некоторую информацию о привязке ниже.

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  <standardEndpoints>
    <webHttpEndpoint>
    <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
    </webHttpEndpoint>
  </standardEndpoints>
  <bindings>
    <netTcpBinding>
    <binding name="NetTcpBinding" closeTimeout="00:02:00" openTimeout="00:02:00"
      receiveTimeout="00:20:00" sendTimeout="00:02:00" transactionFlow="true"
      transferMode="Buffered" maxBufferPoolSize="2147483647" 
      maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
        maxNameTableCharCount="2147483647" />
      <security mode="None">
      <transport protectionLevel="None" />
      </security>
    </binding>
    </netTcpBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
    <behavior name="tcpServiceBehavior">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="tcpServiceBehavior" name="MyClass">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcpBinding" contract="IMyClass">
      <identity>
      <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
      <add baseAddress="net.tcp://localhost:8732/Design_Time_Addresses/MyService/MyClass" />
      </baseAddresses>
    </host>
    </service>
  </services>
</system.serviceModel>

И создать экземпляр с кодом ниже:

ServiceHost wcfHost = new ServiceHost(typeof(MyClass));
wcfHost.Open();

Используя QuickWatch проверил его и проверил значения конфигурации. Затем я добавил ссылку на службу "net.tcp: // localhost: 8732 / Design_Time_Addresses / MyService / MyClass" в другой проект. Итак, новый файл конфигурации ниже был создан в клиентском проекте.

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="NetTcpBinding_IMyClass" closeTimeout="00:01:00"
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
        transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
        hostNameComparisonMode="StrongWildcard" listenBacklog="10"
        maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
        maxReceivedMessageSize="65536">
        <readerQuotas maxDepth="32" maxStringContentLength="8192"
               maxArrayLength="16384" maxBytesPerRead="4096"
               maxNameTableCharCount="16384" />
        <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
        <security mode="None">
          <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
          <message clientCredentialType="Windows" />
        </security>
      </binding>
    </netTcpBinding>
  </bindings>
  <client>
    <endpoint address="net.tcp://localhost:8732/Design_Time_Addresses/MyService/MyClass" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IMyClass" contract="IMyClass" name="NetTcpBinding_IMyClass">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
  </client>
</system.serviceModel>

Проблема в том, что конфигурация привязки хоста не может прийти к клиенту. Если я изменю конфигурацию клиента, это не влияет. Например, изменив значение maxStringContentLength с 8192 на 2147483647 , затем увидел, что клиент создан с правильной конфигурацией, но работает со старой конфигурацией. Поиск " 8192 " в решении и в файлах .svcinfo в виде XML-схемы. Как я могу решить эту странную ситуацию?

1 Ответ

0 голосов
/ 14 марта 2012

Щелкните правой кнопкой мыши ссылку на службу и «Обновите» it и VS создаст заново файлы svcinfo, или вы можете полностью избежать этой проблемы, не используя VS для создания прокси службы и вместо этого создавая собственный прокси службы вручную (считаетсялучшая практика, насколько я знаю).Как вы уже отметили, «Добавить ссылку на службу» недостаточно умна, чтобы при создании клиента взять все эти значения конфигурации из службы.

...