2011-08-26 2 views
2

저는 C# Webservices를 처음 사용합니다. 많은 양의 데이터를 반환하는 WebMethod가 있습니다. 따라서 전송 상태를 볼 수 있어야합니다. WebMethod가 가치를 반환했는지 어떻게 알 수 있습니까? 나는 사건이나 어떤 것에 묶을 수 있을까?.net WebMethod가 그 값을 반환했을 때를 아는 방법?

[WebMethod] 
public List<TEST.Models.ArticleModel> GetArticles(string terminalSerial) 
{ 
    Communication comm = new Communication { 
     StartDate = DateTime.Now, 
     Status = "Started" 
    }; 
    var terminal = (from t in context.Terminals 
        where t.SerialNumber == terminalSerial 
        select t).FirstOrDefault(); 
    var articles = from a in context.Articles 
        where a.CountryID == terminal.Customer.CountryID 
         && a.LastEdit > terminal.LastSync 
        select new TEST.Models.ArticleModel { 
         ArticleID = a.ArticleID, 
         ArticleGroupID = a.ArticleGroupID, 
         ArticleGroupName = a.ArticleGroup.Name, 
         CountryName = a.Country.Name, 
         Description = a.Description, 
         EAN = a.EAN, 
         SAPID = a.SAPID 
        }; 
    terminal.LastSync = DateTime.Now; 
    comm.TerminalID = terminal.TerminalID; 
    context.SubmitChanges(); 
    return articles.ToList(); 
} 
+1

분명히 당신은 호출 컨텍스트에서 의미, 그래서 당신은 그것을 부르는거야? –

+0

WebMethod가 비동기 기능을 수행하는 것으로 보이지 않습니다. 당신이 정확히 그렇게해야한다는 것을 의미합니다. 콜백 및 이벤트를 사용하여 진행 상황을보고 할 수 있습니다. –

+0

맞아. http://msdn.microsoft.com/en-us/library/aa719796(v=vs.71).aspx에 예제를 따르기로 결정했지만 어셈블리에 대한 참조가 누락 된 것 같습니다. RemoteService 및 AuthorRoyalties 클래스를 해결할 수 없습니다. 나는 google'ing 그것을 시도했지만 ... – Andreas

답변

0

서버 측 :

문제의 방법은 다음과 같습니다
사용 로깅 또는이 같은 파일을 nrmal하는 목록을 작성 :

[WebMethod] 
public List<TEST.Models.ArticleModel> GetArticles(string terminalSerial) 
{ 

//..... your code here 

System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\test.txt"); 
List<TEST.Models.ArticleModel> theList = articles.ToList(); 
file.WriteLine("you have "+ theList.Count); 
for(ArticleModel articleModel : theList) 
    file.WriteLine(articleModel.ToString()); 

file.Close(); 
} 


같은 일을에 클라이언트 측에서 WebService를 호출하고 결과를 File에 씁니다.

0

질문을 올바르게 이해 한 경우 클라이언트 측에서 전송이 완료되었음을 사용자에게 알리는 방법을 알고 싶습니다.

일반적으로 Ajax 요청에는 "OnSucess"및 "OnError"와 같이 클라이언트 측에서 적어도 2 개의 이벤트에 연결하는 방법이 있습니다. 요청이 성공적으로 완료되었는지 여부에 따라 둘 중 하나가 호출됩니다. 예를 들어 (요청을 수행하기 위해 jQuery를 사용하여)이 코드를 고려하십시오

$.ajax({ 
    type: "POST", 
    url: "YourMebService.asmx/GetArticles", 
    data: "{'terminalSerial': '" + "your_value_here" + "'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    alert('Your request completed successfully'); 
    }, 
    error: function(xhr, ajaxOptions, thrownError) { 
     alert('There was a problem processing the request'); 
    } 
}); 

기본적으로하고있다 위의 코드를 다음

문제라는 메서드를 노출 YourwebService.asmx라는 Webservice를에 HTTP-POST 요청 GetArticles (url 매개 변수 참조)

매개 변수는 WebMethod가 예상하는 매개 변수를 설정합니다 (이 경우 문자열 유형이 terminalSerial). 요청이 성공적으로 완료되면 success 함수가 호출됩니다. 그렇지 않으면 error 함수가 호출됩니다.

+0

나는 내가 원하는 것에 대해 충분히 명확하지 않았을지도 모른다. 나는 모든 것을 서버에 의해 처리되기를 원한다. 어떤 이유로 클라이언트가 서버에서 반환 한 데이터를받지 못하면 서버는이를 알아야합니다. 클라이언트는 신경 쓰지 않지만 로깅 목적으로 서버는 전송이 잘못되었는지를 알아야합니다. – Andreas

+0

@Andreas이 방법으로는이 작업을 수행 할 수 없습니다. HTTP는 연결이 끊어진 프로토콜입니다. 아마도 웹 소켓을 사용하여 데이터를 보내거나 받고 서버 측에서 오류를 감지하여 다르게 접근해야합니다. http://en.wikipedia.org/wiki/WebSocket – Icarus

관련 문제