2012-02-02 5 views
6

Windows 2008 IIS Coldfusion 서버에서 웹 서비스를 사용하는 Winforms 응용 프로그램이 C#으로 작성되었습니다. 모든 웹 서비스 호출은 성공하지만 다음과 같은 오류로 약 50 %의 시간이 실패합니다.웹 서비스 사용 중 오류 : 기존 연결이 강제로 닫혔습니다.

System.InvalidOperationException이 사용자 코드 에서 처리되지 않았습니다. 메시지 = XML 문서 (1254, 7)에 오류가 있습니다.

의 InnerException : 전송 연결에서 데이터를 읽을 수 없습니다 System.IO.IOException 메시지 =의 내부 예외

은 기존의 연결이 원격 호스트에 의해 강제로 폐쇄되었다.

IIS 로그를 확인한 결과 503 오류 (서비스를 사용할 수 없음)와 IIS 코드 64 (지정된 네트워크를 더 이상 사용할 수 없음)가 표시됩니다. 어떤 제안이라도 좋을 것입니다.

내가 SOAP UI의 내 웹 서비스를 실행하고 나는 다음과 같은 오류가 발생합니다 :

(자), javax.net.ssl.SSLException : 연결이되었습니다 종료 : (자), javax.net.ssl.SSLException : java.net.SocketException의 : 연결 재설정

이 코드는 한 회사에서 잘 작동하지만이 오류는 현재 제가 일하는이 회사의 거의 모든 시간에 나타납니다.

+0

Windows 이벤트 로그, 특히 응용 프로그램 로그를 확인하십시오. BTW, 서비스는 ColdFusion에서 _written_입니까? –

+0

이 문제와 관련된 이벤트 로그에는 오류 또는 다른 오류가 없습니다. 서비스는 Coldfusion으로 작성됩니다. –

+0

웹 서비스 공급 업체에 연락 했습니까? 그것은 결국 그 문제에 관한 것 같지만, 반드시 소비 애플리케이션에서는 아닙니다. –

답변

0

비슷한 오류가 발생하여 XML 직렬화에서 예외가 발생했습니다. 대부분 xmlserializer가 일부 속성을 읽으려고 시도하고 get 메서드가 일부 데이터베이스 연결이 이미 닫혀 있거나 사용할 수없는 리소스로 인해 예외가 발생하는 경우가 대부분입니다.

global.asax에서 오류 이벤트로 예외를 기록하려고 했습니까?

가끔 global.asax가 오류 이벤트를 발생시키지 않으면 응답 필터를 통해 오류를 기록하는 유일한 방법입니다. web.config에 사용자 정의 응답 필터를 추가 할 수 있습니다.이 필터를 사용하면 XML이 올바르게 직렬화 된 양과 실패한 위치를 분석 할 수 있습니다.

http://msdn.microsoft.com/en-us/library/aa479332.aspx

http://www.raboof.com/projects/elmah/

+0

global.asax 란 무엇입니까? 이것은 ASP.net 프로그램이 아닙니다. web.config에 사용자 정의 응답 필터를 추가하는 방법은 무엇입니까? –

+0

관련 링크를 추가했습니다. –

1

당신이 서비스에 연결 다음 설정하여 클라이언트 응용 프로그램에서 서비스 추적 로깅을 가능하게하는 WCF 클라이언트를 사용하는 경우 :

<system.diagnostics> 
    <trace autoflush="true" /> 
    <sources> 
     <source name="System.ServiceModel" 
         switchValue="Error" 
         propagateActivity="true"> 
      <listeners> 
       <add name="sdt" 
         type="System.Diagnostics.XmlWriterTraceListener" 
         initializeData= "ErrorTrace.svclog" 
         /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

창문 다운로드 sdk 및 이러한 로그 파일에 대한 좋은 추적 뷰어가 있습니다. WCF 통신 오류의 근본 원인을 파악하는 데 도움이됩니다.

+0

불행히도 WinForms를 사용하고 있습니다 (이전 버전의 프로그램). WinForms에 대한 추적 기능이 있습니까? –

+0

winforms 내에서 WCF 클라이언트를 계속 사용할 수 있습니다. 즉, .NET 3.0 이상인 경우입니다. –

1

플랫폼 간 통신을 사용하여 때로는 발생한 예외가 내부에서 일어나는 일에 대한 실제 설명이 아님 (한 번 내 코드에 발생 함).

이 예외의 한 가지 원인은 응답 시간이 웹 서비스 방법이 완료하는 데 필요한 시간보다 약간 적다는 것입니다. 따라서 app.config에서 제한 시간을 늘리십시오.

작동하지 않는 경우 두 가지 문제가 발생할 수 있습니다.

  1. SSL을 사용하는 경우 SSL 인증서 유효성에 문제가 있습니다.
  2. XML에 사용 된 일부 잘못된 문자가 있습니다. 예를 들어 플랫폼이 유니 코드 문자를 지원하지 않고 XML에 사용되지 않는 문자가 있습니다.

그러나 시간 제한을 늘리면 문제가 해결되기를 바랍니다.

0

중급 "하나의 대상에서만 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다"라는 네트워킹 문제와 같은 소리가납니다.

액세스하려는 서버와 두 위치의 관련 방화벽에서 로그를 가져 오십시오. Fiddler 또는 NetMon/WireShark/Ethereal을 실행하여 더 이상 진단 할 수 있습니다.

0

어떤 상황에서도 연결이 끊어집니다. 서버 및 클라이언트에서 제한 시간이 충분해야하는지, 반환 할 데이터에 재귀가 없는지 확인하십시오. 순환 참조. 직렬화는 반환 될 때 직렬화되기 때문에이 경우 중요합니다.

WCF 추적 프로그램을 수행하고 거기에서 응답을 확인하십시오. 서버의 모든 결함으로 인해 연결이 닫힙니다. 서버에 사용자 이름이 필요한 경우 해당 사용자 이름이 올바른지 확인하십시오. SSL 오류 처리. WCF 클라이언트를 사용하여 서비스를 테스트하십시오.

첫 번째 오류는 가난한 제외하고 웹 서비스 측에서 무슨 일이 일어나고 어쩌면 일부 잘못된 데이터가되는이 서비스에 전달하고, 슬로우 :

0

이 여기 어둠 속에서 촬영이 될 수 있지만, 내 이론이다? 이로 인해 XML 형식이 잘못되었다는 오류가 반환 될 수 있습니다. 몇 가지 테스트 사례를 통해 어떤 데이터가 서비스로 전달되고 무엇이 문제를 일으키는 지 확인할 수 있습니다.

웹 서비스 예외에 관한 특정 상황에서 이전에 보았던 두 번째 오류와 try catch가 서비스에 대한 using 문을 감싸고 있습니다. 이 논리의 결합은 정리되지 않은 조기 퇴출을 야기했습니다.

0

내가 WCF-Webservice를 소비 할 때 TCP/IP가 ...

3

내가 최근에 비슷한 메시지를 받았습니다 말 현재 회사와 그들을 마지막 회사의 기존 프로토콜을 확인하고 비교하려고합니다. 제 경우에는 서버 측에서 구성 오류가 될 수 있으므로 으로 바뀌 었습니다. 어쩌면 뭔가가 다르게 구성됩니다.이 경우 서버 한 대에 이 있습니까? 문제점 : 기본 최대 메시지 크기가 서버에서 으로 너무 작게 구성되어 동일한 강제 연결을 닫는 문제가있었습니다. DOS 공격을 피할 수있는 최대 메시지 크기는 입니다 ...

0

IIS의 응용 프로그램 풀 재활용 구성을 확인하십시오. 예를 들어 "개인 메모리 제한"이 값 (예 : 100MB)으로 설정된 다음 w3wp 프로세스가이 제한을 초과하여 응용 프로그램 풀이 재생 될 때이 오류가 발생했습니다.

기존 연결에 완료 시간이 주어지고 새로 연결되는 응용 프로그램 풀에서 새 연결을 처리하기 때문에 일반적으로 문제가되지 않습니다.

종료 시간 제한 (일반적으로 90 초) 내에 모든 연결이 닫히지 않으면 IIS에서 해당 연결을 종료하고 클라이언트에서 "기존 연결이 강제로 닫혔습니다."라는 오류가 발생할 수 있습니다.

0

이것은 OP의 특정 상황에 적용 할 수 있는지 확실하지 않지만 요즘 여기에 도착한 사람들에게 도움이 될 수 있습니다. 이 예외의 잠재적 원인 중 하나는 일치하지 않는 보안 프로토콜입니다. 호출하는 서버에 TLS 1.2가 필요하고 이전 버전의 ASP.net (< = Version 4.0)을 사용하는 경우 변경하지 않으면 이전 보안 프로토콜을 사용하여 전화를 겁니다. ASP.net에서 TLS 1.2를 사용하도록 할 수 있습니다 (아래 참조). 이 작업은 응용 프로그램의 어느 위치에서나 수행 할 수 있지만 TLS 1.2가 필요한 웹 서비스를 호출하는 줄 바로 앞에 넣습니다.

using System.Net; 

... 

//Enable TLS 1.2 
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; 

// Call the Web Service that requires TLS 1.2 
관련 문제