2011-03-10 3 views
2

"원격"데이터베이스 호출을 허용하는 WCF 서비스에 관해서 만 설명합니다. 계약서에 포함 된 항목 중 하나는 HTTP 요청을 원격으로 처리하는 기능입니다.WCF HttpWebResponse 인터페이스/계약의 객체 직렬화

[Operation_Contract()] 
bool DoWebRequest(string url, out HttpWebResponse resp); 

with the implementation (more or less -- no error reporting here): 

public bool DoWebRequest(string url, out HttpResponse resp) 
{ 
    bool done = false; 
    resp = null; 

    WebRequest req = WebRequest.Create(url); 
    resp.Credentials = CredentialCache.DefaultCredentials; 
    resp = (HttpWebResponse)req.GetResponse(); 
    done = (resp != null ? true : false); 

    return done; 
} 

그리고, 나는, 콘솔 응용 프로그램에서 호스팅하는 WCFServiceLibrary이 포장 그것에 클라이언트와 다른 응용 프로그램에서 서비스 참조를 만들 :

다음은 인터페이스입니다. 그런 다음 클라이언트를 다른 클래스에 랩핑하고 client.DoWebRequest (url, out resp)를 통해 호출합니다.

내 모든 데이터 액세스 작업이 작동합니다. 그러나 테스트 응용 프로그램에서 사용하려고하면 다음이 표시됩니다.

소켓 연결이 중단되었습니다. 메시지를 처리하는 중 오류가 발생하거나 원격 호스트에서받는 시간 초과 또는 기본 네트워크 리소스 문제가 원인 일 수 있습니다. 로컬 소켓 타임 아웃은 '00 : 00 : 59.7180000 '입니다.

나는이 예외가 내 인터페이스 정의에서 HttpWebResponse 객체를 제대로 직렬화하지 않는다는 것과 관련이 있다고 생각합니다. 나는 틀릴 수 있었다. 이 작업을 수행하는 방법에 대한 도움을 주시면 감사하겠습니다.

서비스 참조를 만들 때 내 매개 변수가 잘못 표시됩니다. 클라이언트 Reference.cs 파일은 다음과 같은 방법을 보여줍니다.

public bool DoWebRequest(out HttpWebResponse resp, string url) 
{ 
    return base.Channel.DoWebRequest(out resp, url); 
} 

어떤 아이디어가 있습니까? 전환 된 매개 변수가있는 유일한 방법입니다. 이것이 문제의 일부일 수 있습니까? 하지만이 도구로 왜이 작업을 수행 할 수 있는지 알 수 없습니다.

다시 한번 감사드립니다.

답변

2

HttpWebResponse 개체에는 요청을 처리하는 네트워크 스트림과 같이 해당 컴퓨터에서만 유효한 정보가 포함됩니다. 이 정보는 직렬화하는 데 의미가 없습니다.

웹 요청 및 웹 응답의 의미를 추상화하고 해당 추상화와 일치하는 개체를 만들어야합니다.

+0

사실 새로운 방법으로 응답 스트림을 보내면 작동하는 것 같습니다. 스트림이 기본 수신 크기보다 크기 때문에 아직 완료되지 않았습니다. 모든 구성 설정에서 변경했지만 여전히 문제가 있습니다 .... 감사합니다. – Dan7el