максимальный размер сообщения wcf

Эй, ребята, вопрос WCF для вас здесь:

У меня есть две службы, и я посылаю довольно короткие сообщения между ними (~ 100 КБ). Хотя упомянутое ранее значение типично для размера сообщения, оно может сильно колебаться (как в положительном, так и в отрицательном направлении).

Таким образом, чтобы справиться с такими ситуациями, когда мне нужно транспортировать набухшее сообщение, я включил все атрибуты максимального размера сообщения, максимального размера строки и т. Д. В app.config на стороне клиента и сервера (при этом соответствующая конечная точка правильно ссылается на привязку). в котором указаны размеры)

Граница, которую я вставил, полностью превышает любой возможный размер сообщения в целях безопасности. Однако там, где межсервисная связь оказалась надежной на нижнем конце шкалы размера сообщений, на более высоком конце это не так - сообщения, похоже, вообще не доставляются.

самое странное, что если бы сообщение превысило максимальный размер, то было бы сгенерировано исключение (я столкнулся с таким количеством, чтобы знать это!), но ничего не выбрасывается - все проходит бесшумно. Я экспериментировал с сообщениями различного размера, и это определенно только начинает происходить с ростом размера сообщений. Я могу доказать, что они не принимаются службой назначения, так как при получении служба регистрирует журнал в БД, но при больших сообщениях журнал не создается.

Как я уже сказал, я почти уверен, что я увеличил размер всех применимых атрибутов в app.config, и поэтому я полностью и совершенно сбит с толку этим поведением!

какие-либо предложения о том, что может быть причиной такого мистического поведения? любая помощь будет высоко ценится, так как это последнее препятствие в моем проекте! Спасибо :-)

15.12.2008 17:34:51
Вы проверили журналы IIS, чтобы увидеть, получаете ли вы большие сообщения?
dtc 15.12.2008 20:16:27
3 ОТВЕТА

Существуют отдельные проблемы с WCF, которые приводят к его «тихому отказу» (т. Е. Без исключения), что может быть трудно отладить. Похоже, это может быть тот случай, который вы видите.

В этом случае включение параметров трассировки в WCF может быть чрезвычайно полезным, так как оно должно позволить вам увидеть, действительно ли сообщение достигает службы и как с ней справляется диспетчер.

0
16.12.2008 12:46:29

Что ж, похоже, эта проблема решилась сама собой (неожиданно после того, как никогда не жаловался раньше, WCF начал расстраиваться из-за определенного значения в app.config, изменил его, и это, похоже, сработало!)

Однако теперь у меня такая же странная проблема! по какой-то причине он отказывается признать, что я настроил метаданные для публикации. Мой app.config (на стороне хоста) настроен следующим образом:

<services>
  <service name="DataFeederService.FeederService" behaviorConfiguration="DataFeederService.FeederServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8010/Feeder"/>
        <add baseAddress="net.pipe://localhost/FeederPipe"/>
      </baseAddresses>
    </host>
    <!-- Service Endpoints -->
    <!-- Unless fully qualified, address is relative to base address supplied above -->
    <endpoint name="namedPipeEndpoint" 
    address=""  
    bindingConfiguration="IPCWindowsSecurity" 
    binding="netNamedPipeBinding" 
    contract="DataFeederService.IFeederService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

    <endpoint name="httpEndpoint" 
    address="FeederService" 
    binding="wsHttpBinding" 
    bindingConfiguration="httpBinding" 
    contract="DataFeederService.IWebFeederService"/>

    <!-- Metadata Endpoints -->
    <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. -->
    <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>

<bindings>
  <netNamedPipeBinding>
    <binding name="IPCWindowsSecurity" 
    maxBufferPoolSize="965536" 
    maxBufferSize="965536" 
    maxReceivedMessageSize="965536">
      <readerQuotas maxStringContentLength="965536" />
      <security mode="Transport">
        <transport protectionLevel="EncryptAndSign" />
      </security>
    </binding>
  </netNamedPipeBinding>
  <wsHttpBinding>
    <binding name="httpBinding" 
    maxBufferPoolSize="965536"
    maxReceivedMessageSize="965536">
      <readerQuotas maxStringContentLength="965536" />
    </binding>
  </wsHttpBinding>
</bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="DataFeederService.FeederServiceBehavior">
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="True" policyVersion="Policy15"/>
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true.  Set to false before deployment 
      to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="True" httpHelpPageEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Я старался изо всех сил выяснить, почему он будет утверждать, что метаданные не публикуются по указанному адресу " http: // localhost: 8010 / Feeder / mex ". любая помощь будет принята с благодарностью.

Ура!

1
17.12.2008 10:25:49

извините, ребята, после дальнейшего траления я обнаружил источник ошибки! один из классов в datacontract был изменен (атрибут [DataContract] был удален, но странным образом [DataMemeber] был оставлен в соответствующих свойствах! очень странно!)

В любом случае, спасибо за вашу помощь, особенно за то, что помогли мне добраться до этой точки, где я наконец смогу вымыть руки из этого чертового проекта :-)

1
17.12.2008 11:17:14