максимальный размер сообщения wcf - PullRequest
3 голосов
/ 15 декабря 2008

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 17 декабря 2008

ну, похоже, эта проблема решилась сама собой (внезапно, после того, как никогда не жаловался раньше, 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 декабря 2008

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

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

0 голосов
/ 16 декабря 2008

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

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

...