"원격"데이터베이스 호출을 허용하는 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);
}
어떤 아이디어가 있습니까? 전환 된 매개 변수가있는 유일한 방법입니다. 이것이 문제의 일부일 수 있습니까? 하지만이 도구로 왜이 작업을 수행 할 수 있는지 알 수 없습니다.
다시 한번 감사드립니다.
사실 새로운 방법으로 응답 스트림을 보내면 작동하는 것 같습니다. 스트림이 기본 수신 크기보다 크기 때문에 아직 완료되지 않았습니다. 모든 구성 설정에서 변경했지만 여전히 문제가 있습니다 .... 감사합니다. – Dan7el