Возврат DataTables в WCF/.NET

Используйте безопасный URL для вашего первоначального соединения, то есть вместо «http: //» используйте «https: //». Если транспорт WebSocket выбран, то Socket.IO должен автоматически использовать «wss: //» (SSL) для соединения WebSocket.

Обновление:

Вы также можете попробовать создать соединение с использованием опции «secure»:

var socket = io.connect('https://localhost', {secure: true});
49
задан Peter Mortensen 25 July 2015 в 11:48
поделиться

5 ответов

Для любого имеющего подобные проблемы, я решил свою проблему. Это были несколько-сгибов.

  • Как предложенный Darren и сохраненный Paul, Max.. Свойства размера в конфигурации должны были быть увеличены. Утилита SvcTraceViewer помогла в определении этого, но это все еще не всегда дает самые полезные сообщения об ошибках.
  • также кажется, что, когда Сервисная Ссылка обновляется на стороне клиента, конфигурация не будет иногда обновлять правильно (например, Изменяющий значения конфигурации на сервере будет не всегда правильно обновлять на клиенте. Я должен был войти и изменить Max.. Свойства размера многократно на обоих стороны клиента и сервера в ходе моей отладки)
  • Для DataTable, чтобы быть сериализуемым, этому нужно дать имя. Конструктор по умолчанию не дает таблице имя, таким образом:

    return new DataTable();
    

    не будет сериализуемым, в то время как:

    return new DataTable("someName");
    

    назовет таблицу, вообще передается как параметр.

    Примечание, что таблице можно дать имя в любое время путем присвоения строки TableName свойство DataTable.

    var table = new DataTable();
    table.TableName = "someName";
    

, Надо надеяться, который поможет кому-то.

81
ответ дан saluce 7 November 2019 в 11:32
поделиться

Лучший способ диагностировать эти виды ошибок WCF (те, которые действительно не говорят Вам очень) состоит в том, чтобы позволить проследить. В Вашем web.config файле добавьте следующее:

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" 
              switchValue="Information" 
              propagateActivity="true">
        <listeners>
          <add name="ServiceModelTraceListener" 
               type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
               initializeData="wcf-traces.svclog"/>
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

можно тогда открыть получающийся файл в утилите SvcTraceViewer.exe, которая прибывает в SDK Платформы.NET (или с Visual Studio). На моей машине это может быть найдено в %PROGRAMFILES %\Microsoft SDKs\Windows\v6.0A\Bin\SvcTraceViewer.exe.

Просто ищут сообщение об ошибке (полужирным красный), и это скажет Вам конкретно, какова Ваша проблема.

15
ответ дан Chris Gillum 7 November 2019 в 11:32
поделиться

Атрибутом, который Вы хотите, является OperationContract (в интерфейсе) / Операционное Поведение (на методе):

[ServiceContract]
public interface ITableProvider
{
    [OperationContract]
    DataTable GetTbl();
}


[OperationBehavior]
public DataTable GetTbl(){
    DataTable tbl = new DataTable("testTbl");
    //Populate table with SQL query

    return tbl;
}

кроме того, в... Я думаю сервисная конфигурация..., Вы хотите определить, что ошибки могут быть отправлены. Вы могли бы поражать ошибку, которая является чем-то как размер сообщения, к большому, и т.д. Можно зафиксировать это путем уклонения с квотами читателя и таким.

По умолчанию wsHttpBinding имеет получить квоту размера подобных 65  КБ, поэтому если бы XML сериализированной таблицы данных является больше, чем которые, это бросило бы ошибку (и я на 95% уверен таблица данных, является больше, чем 65  КБ с данными в нем).

можно изменить настройки для квот читателя и такой в web.config / app.config, или можно установить его на обязательном экземпляре в коде. Но да, это, вероятно, какова Ваша проблема, если Вы не изменили ее по умолчанию.

члены WSHttpBindingBase - Взгляд на свойство ReaderQuotas, а также свойство MaxReceivedMessageSize.

3
ответ дан Peter Mortensen 7 November 2019 в 11:32
поделиться

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

, вероятно, необходимо установить MaxReceivedMessageSize и MaxBufferSize к более высоким значениям на соединении.

2
ответ дан Sam 7 November 2019 в 11:32
поделиться

Я думаю, что Darren, скорее всего, корректен - значения по умолчанию предусмотрели WCF, являются смехотворно маленькими и если Вы врезаетесь в них, Вы заканчиваете с ошибками, которые может быть трудно разыскать. Они, кажется, появляются, как только Вы пытаетесь сделать что-либо вне простого тестового сценария. Я потратил впустую больше времени, чем я хотел бы допустить отлаживать проблемы, которые оказались связанными с различной конфигурацией (размер) настройки на обоих клиент и сервер. Я думаю, что закончил тем, что изменил почти всех их, напр. MaxBufferPoolSize, MaxBufferSize, MaxConnections, MaxReceivedMessageSize, и т.д.

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

0
ответ дан Paul Mrozowski 7 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: