2011-11-28 5 views
0

인트라넷의 다른 어딘가에서 호스팅되는 WCF 서비스의 프록시 역할을하는 aspx 페이지를 만들었습니다. 목표는 크로스 사이트 스크립팅 제한에 구속되지 않고 모든 WCF 웹 서비스에서 작동 할 수있는 페이지를 갖는 것입니다..NET 프록시 단순 WCF 서비스가 작동하지 않습니다.

전화가 작동하고 디버거가 요청을 받지만 데이터가 전송되지 않고 null입니다. 동일한 도메인 내에서 프록시 (jquery ajax)를 사용하지 않을 때이 작업을 수행합니다. Fiddler2는 어떤 이유로 든 내 HttpWebRequest를 선택하지 않으므로 실제로 보내지는 것을 볼 수 없습니다.

아이디어가 있으십니까? 데이터를 게시하는 방식이 잘못 되었습니까? 피들러가 WebHttpRequest를 선택하도록하는 방법은 무엇입니까?

Proxy.aspx

// var data = Request.Form["d"]; 
// ProxyRequest r = JsonConvert.DeserializeObject<ProxyRequest>(data); 
var r = new { ServiceName = "AccountService.svc", Type = "POST", MethodName = "AjaxFindCompany", 
    Data = "{\"AccountNumber\":null,\"Address\":{\"City\":\"Pittsburgh\",\"Country\":null,\"State\":\"PA\",\"Street1\":\"1 Ave\",\"ZipCode\":\"15222\"},\"BusinessName\":\"AUto\"}" }; 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("{0}/{1}/{2}?{3}", "http://localhost:2749", r.ServiceName, r.MethodName, r.Data)); 
request.Method = r.Type; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

StreamReader contentReader = new StreamReader(response.GetResponseStream()); 
Response.ContentType = response.ContentType; 
Response.Write(contentReader.ReadToEnd()); 

IAccountService.cs

[OperationContract] 
[WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] 
MatchCompanyResponse AjaxFindCompany(MatchCompanyRequest request); 

AccountService.cs

public MatchCompanyResponse FindCompany(MatchCompanyRequest request) 
{ 
    AccountHandler handler = new AccountHandler(); 
    return handler.FindCompany(request); 
} 

public MatchCompanyResponse AjaxFindCompany(MatchCompanyRequest request) 
{ 
    // after calling proxy.aspx the debugger captures here but 
    // request is null... 
    return FindCompany(request); 
} 
+1

경우, 당신은 당신의 피들러 문제를 해결하기 위해이 링크를 시도 할 수 : 그래서 요청이 비슷한해야합니다. asp # Q-LocalTraffic –

+1

아직 웹 페이지와 웹 서비스가 모두 스택 추적/전체 예외 세부 정보를 반환하도록 구성되어 있는지 확인하십시오. 특정 문제를 밝힐 수 있습니다. –

+1

마지막으로 WCF 측면에서 자세한 디버깅을하려면 WCF 진단을 사용하도록 설정해야합니다. 코드가 충돌하기 전에 WCf pipelione에서 분명히 잘못된 것이 있습니다. 이것은 무엇인지 알려줄 것입니다. –

답변

1

에서 POST 요청의 경우 데이터는 URI가 아닌 요청 본문에 저장됩니다. http://www.fiddler2.com/Fiddler/help/hookup :

서비스 주소는 localhost입니다
var r = new { ServiceName = "AccountService.svc", Type = "POST", MethodName = "AjaxFindCompany", 
    Data = "{\"AccountNumber\":null,\"Address\":{\"City\":\"Pittsburgh\",\"Country\":null,\"State\":\"PA\",\"Street1\":\"1001 Liberty Ave\",\"ZipCode\":\"15222\"},\"BusinessName\":\"AUto\"}" }; 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("{0}/{1}/{2}", "http://localhost:2749", r.ServiceName, r.MethodName)); 
request.Method = r.Type; 
Stream reqStream = request.GetRequestStream(); 
byte[] reqBytes = Encoding.UTF8.GetBytes(r.Data as string); 
reqStream.Write(reqBytes, 0, reqBytes.Length); 
reqStream.Close(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader contentReader = new StreamReader(response.GetResponseStream()); 
Response.ContentType = response.ContentType; 
Response.Write(contentReader.ReadToEnd()); 
+0

이걸로 나는 400 에러를 얻었고 디버거는 결코 그것을 선택하지 않았다. 그리고 내 피 들러가 아직 아무것도 안 고르는 중입니다. – ryan

+0

400 문제는 콘텐츠 유형으로 인한 것입니다. – ryan

관련 문제