문제

가 WCF 서비스에서는 돌아가려면 DataTable.저는 이것은 종종 높은 토론,주제로까지 여부 또는 반환하지 않 DataTables 이하로 유지하는 것이 좋습니다.을 넣어 보자는 따습니다.

를 만들 때 DataTable,처음부터 아래와 같이,문제가 없습니다.테이블이 생성 채워지고,클라이언트에게 보내는 모든 것이 잘:

[DataContract]
public DataTable GetTbl()
{
    DataTable tbl = new DataTable("testTbl");
    for(int i=0;i<100;i++)
    {
        tbl.Columns.Add(i);
        tbl.Rows.Add(new string[]{"testValue"});
    }
    return tbl;
}

그러나,빨리 나가고 데이터베이스에 테이블을 만들려면,아래로,나는 CommunicationException"기본 연결이 끊어졌습니다:의 예기치 않게 연결이 닫혔습니다."

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

    return tbl;
}

테이블이가 올바르게 채워지 서버 사이드에서 작동합니다.그것보다 훨씬 작 테스트는 테이블이 나를 통해 반복하고 반환하며,쿼리가 작고 빠르게 아무 문제가 없으로 여기에 시간 제한 또는 큰 데이터 전송을 지원합니다.동일한 기능과 정확한 DataContracts/ServiceContracts/BehaviorContracts 사용되고 있습니다.

왜는 방법으로 테이블 채워지고 있는 모든 베어링 테이블에 돌아 성공적으로?

도움이 되었습니까?

해결책

누구나 비슷한 문제가 해결이 내 문제입니다.그것은 여러 배입니다.

  • 으로 대런 제안 및 폴 백업,Max..크기에서 속성을 구성하는 데 필요한 확대됩니다.이 SvcTraceViewer 유틸리티에 도움이 결정이지만,그것은 여전히지 않게 가장 유용한 오류 메시지입니다.
  • 그것도 나타나는 경우 서비스에 참조 업데이트 클라이언트 측에서,구성이 때때로이 올바르게 업데이트(예를들면변화하는 config 값이 서버가 항상 올바르게 업데이트에서 클라이언트입니다.나는 가야했다 변경 Max..크기 속성에 여러 번을 클라이언트와 서버 측의 과정에서 나는 디버깅)
  • 에 대한 DataTable 하는 직렬화 될 필요가 주어진 이름입니다.기본 생성자를 제공하지 않습 테이블의 이름은,그래서:

    return new DataTable();
    

    되지 않는 직렬화면:

    return new DataTable("someName");
    

    이름을 것입니다 테이블에 무엇이로 전달된 매개 변수입니다.

    참고 테이블 주어질 수 있는 언제든지 이름을 지정하여 문자열을 TableName 시설의 DataTable.

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

희망하는 데 도움이 될 것입니다.

다른 팁

을 진단하는 가장 좋은 방법은 이러한 종류의 WCF 오류(는 사람은 정말 당신을 말하지 않은)사용하고 추적을 설정합니다.에서 당신의 웹입니다.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 유틸리티를 제공.NET Framework SDK(또는 Visual Studio).내 컴퓨터에서,그것은에서 찾을 수 있습니다십시 Microsoft SDKs\Windows\v6.0A\Bin\SvcTraceViewer.exe.

한 오류 메시지(굵은 붉은)및 당신을 말할 것이다 구체적으로 어떤 문제입니다.

추가 시일을 데이터로 설정 및 반환되는 테이블처럼 이렇게...

DataTable result = new DataTable("result");

//linq to populate the table

Dataset ds = new DataSet();
ds.Tables.Add(result);
return ds.Tables[0];

그것을 희망하는 데 도움이 :)

이외의 다른 설정 최대값에 대한 모든 속성을 결합.

지 확인하는 각 테이블을 전달하고 있/에서 돌아오는 웹 서비스에 테이블이 있어야합 이름을 의미하는 table.tablename 제공하지 않아야 공백입니다.

특성 당신이 원하는 OperationContract(에서 인터페이스)/작업 동작(방법):

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


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

    return tbl;
}

또한,에서...내가 생각하는 서비스를 구성...지정하려면 원하는 오류를 보낼 수 있습니다.수도 있습을 치는 오류를 무언가가 다음과 같은 메시지 크기가 큰,etc.당신이 해결할 수 있는 것으로 꾸며 독자량 및니다.

기본적으로 wsHttpBinding 는 받는 크기 할당량의 65KB 면,그래서 직렬화된 데이터는 XML 테이블의보다 더 많은 것,그것을 던져 오류가(그리고 내가 95%확실한 데이터를 테이블보다 더 65KB 데이터에서는다).

설정을 변경할 수 있습에 대한 할당량 및 리더 등에서 web.config / app.config 또는 당신은 설정할 수 있습니다 바인딩에 대한 인스턴스에서 코드입니다.하지만 그래,그건 아마도 어떤 당신의 문제가,변경하지 않았다면 그것은 기본적으로 합니다.

WSHttpBindingBase 원 -보 ReaderQuotas 는 시설뿐만 아니라다 제공합니다.

당신은 아마 불량-datatable 보다 큰 허용되는 최대 패킷에 대한 크기의 연결입니다.

당신은 아마 설정해야 MaxBufferSize 더 높은 값에 연결합니다.

3 에게 이 실패 반환 유형 datatable WCF 서비스

  • 당신은 데이터를 지정하는 테이블과 같은 이름:

    MyTable=new DataTable("tableName");
    
  • 를 추가하는 경우에는 클라이언트 측의 WCF 서비스를 선택합 재사용할 수 있는 dll system.data

  • 지정 특성 datatable 회원과 같은 변수

    [DataMember]
    public DataTable MyTable{ get; set; }
    

내가 생각하는 대런 가능성이 높정-제공하는 기본값 WCF 은 우습게 작고 부딪히면 그들을 끝까지와는 오류를 추적하기가 어려울 수 있습니다.그들은 나타나는 것이 곧 당신이 시도하기도 간단한 테스트 케이스.나는 더 많은 시간을 낭비하다 나 같은 인정하는 문제를 디버깅하는 것으로 밝혀졌다에 관련된 다양한 구성(size)설정에서 클라이언트와 서버입니다.내 생각에 나는 수정의 거의 모든 그들의,ex.MaxBufferPoolSize,MaxBufferSize,MaxConnections 니다,등등.

즉,SvcTraceViewer 유틸리티는 또한 언급은 좋은 것입니다.았으로 실행하고 몇 가지는 경우 그것은 없으로 도움이로 난 좋아했지만,전반적으로 좋은 도구에 대한 분석을 통한 흐름과 오류가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top