2013-01-04 5 views
0

asp.net 프로젝트로 이전 Classic ASP 사이트의 일부 논리를 변환해야합니다. 데이터 게시를 담당하는 일부 기능을 이해하는 데 문제가 있습니다.asp.net에서이 Classic ASP 코드는 어떻게 생겼을까요?

<%Function PostHTTP(strURL, strBody, strErrTemplate) 
ON ERROR RESUME NEXT 
Dim objHTTP, strResult 

    Set objHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0") 

    If Err.Number <> 0 Then 
    strResult = Replace(strErrTemplate, "%1", Err.Number) 
    strResult = Replace(strResult, "%2", Err.Description) 
    strResult = Replace(strResult, "%3", "Init::" & Err.Source) 
    Set objHTTP = Nothing 
    PostHTTP = strstrResult 
    Exit Function 
    End If 

    With objHTTP 
    .Open "POST", strURL, False 
    .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
    .setTimeouts 30000, 30000, 60000, 240000 
    .send strBody 

    If Err.Number <> 0 Then 
     strResult = Replace(strErrTemplate, "%1", Err.Number) 
     strResult = Replace(strResult, "%2", Err.Description) 
     strResult = Replace(strResult, "%3", "Post::" & Err.Source) 
    Else 
     strResult = .responseText 
    End If 
    End With 

' Response.Write "strResult: " & strResult 
'Response.End 


    If Err.Number > 0 Then 
    strResult = Replace(strErrTemplate, "%1", Err.Number) 
    strResult = Replace(strResult, "%2", Err.Description) 
    strResult = Replace(strResult, "%3", Err.Source) 
    ElseIf Len(strResult) = 0 Then 
    strResult = Replace(strErrTemplate, "%1", 2000) 
    strResult = Replace(strResult, "%2", "No response received from remote server.") 
    strResult = Replace(strResult, "%3", "PostHTTP") 
    End If 

    PostHTTP = strResult 
    Set objHTTP = Nothing 
End Function 

이것이 asp.net에서 같을 것이다 : 여기

클래식 ASP에서 함수인가?

ps : 내 자신의 게시 기능을 시도했지만 명확하게 뭔가를 놓쳤습니다. 광산이 작동하지 않습니다.

답변

1

WebClient 클래스를 사용하면 POST의 주요 작업이 매우 간단 해집니다. 예를 들어,

// Form URL and POST-DATA 
... 
using (WebClient wc = new WebClient()) 
{ 
    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
    string strResult = wc.UploadString(strURL, strBody); 
} 
... 

보다 세분화 된 제어를 위해, 당신은 WebRequest 클래스를 사용할 수 있습니다.

편집은 : 당신이 당신의 응답을 WebClient

var request = WebRequest.Create(strUrl); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.Timeout = 240000; // set timeout 
using (var writer = new StreamWriter(request.GetRequestStream())) 
{ 
    // write to the body of the POST request 
    writer.Write(strBody); 
} 
+0

감사 불가능 시간 제한 값을 지정할 필요가 나타나기 때문에 여기 WebRequest에 대한 예제 코드입니다. 내 자신의 방법과 똑같은 일이 일어납니다. 문자열 "strResult = wc.UploadString (strUrl, strBody);"에서이 결과를 기다리면 작업 시간이 초과됩니다. 내가 사용중인 URI는 예를 들어, 게시 용으로 http://10.0.0.1:4321입니다. "Server.CreateObject ("Msxml2.ServerXMLHTTP.3.0 ")"은 어디에 적합합니까? –

+2

@AndrewKemp, ServerXMLHTTP는 HTTP 요청을하기 위해 ASP와 같은 COM 클라이언트 용 API였습니다. 'WebClient' /'WebRequest'는 .NET 세계에서 동등한 (혹은 더 나은) 것입니다. ASP 코드가 다양한 시간 초과 값을 지정하는 것이 유일한 것이고 마지막은 응답을 얻는 것입니다 (240 초). 아쉽게도 webclient는 제한 시간을 지정할 수 없으므로 webrequest를 사용해야합니다. 예제 코드는 내 대답을 편집하십시오. 또한 URL에 프로토콜 (http)을 포함 시키십시오. 그러면 시간 초과 값을 늘려야 할 수도 있습니다. – VinayC

+0

URL에 (http) 프로토콜이 추가되었는지 확인했습니다. 응답을 읽으 려 할 때 작업 시간이 초과되었습니다. 위의 편집에서 볼 수 있듯이 응답에 나타납니다. (위의 편집을 참조하십시오). 아마도 응답이 반환되지 않을 수있는 게시물에 누락 된 것일 수 있습니다. –