2011-11-11 2 views
0

웹 서비스에서 ASP.NET 응용 프로그램을 사용하고 있는데 어떤 이유로 웹 서비스 메서드 중 하나가 건너 뜁니다. 나는 그것이 꽤 간단한 문제라고 확신하지만, 그것은 나를 하루 동안 곤란하게했다. 잘못된 메서드에서 메서드 호출을 사용하고 있는데, OnPreRender가 페이지가로드되기 전에 모든 것을 처리한다고 가정합니다. 폼 객체의 ImageLoc을 URL로 설정하면 ASP.NET 페이지에서 인스턴스를로드 할 때 문제가 있다는 것을 확신 할 수 있습니다.웹 서비스 메서드를 건너 뛰었습니까?

내가 관련 코드를 빠뜨린 것으로 생각하지 않지만, 다른 것을보고 싶다면 알려주세요. 양식 객체는 get/set이있는 몇 가지 속성이므로 생략했습니다. 또한 String 매개 변수가 다른 것으로 변경된다는 점에 유의하십시오. 나는 단지 기초 작업을 설정하려고합니다.

.aspx.cs :

 localhost.MobileFormServices wsMobile = new localhost.MobileFormServices(); 

    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 
     //Call the web service to pass image URL 
     wsMobile.NewForm("parameters"); 
     FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc; 
    } 

웹 서비스 방법 :

//new form object instance 
    private FormLibrary.Form form = new FormLibrary.Form(); 

    //adds the image location to the form object 
    [WebMethod] 
    public void NewForm(String parameters) 
    { 
     form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit 
    } 

    [WebMethod] 
    public FormLibrary.Form FormProperties() 
    { 
     return this.form; 
    } 

답변

1

웹 서비스를 호출하지 않았습니까? 페이지의 호출

FormImage.ImageUrl = wsMobile.FormProperties().ImageLoc; 

사용하지만 같은 객체 인스턴스는 방법

wsMobile.NewForm("parameters"); 

가 호출 될 때보다는 웹 서비스 측면에서 완전히 다른 인스턴스를 호출합니다. 그 때문에

private FormLibrary.Form form = new FormLibrary.Form(); 

이 모든 웹 서비스 호출에서 호출됩니다.

모든 웹 서비스 호출에서 호출을 처리하는 웹 서비스의 새 인스턴스가 만들어집니다. 예를 들어 보겠습니다.

  1. wsMobile.NewForm ("매개 변수") -이 호출을 처리하는 인스턴스가 생성 될 때 새로운 FormLibrary.Form가 생성됩니다. 이 호출에

  2. 당신은 form.ImageLoc을 설정 -하지만이 양식은

  3. FormImage.ImageUrl = wsMobile.FormProperties() 해당 인스턴스에 로컬 ImageLoc;. -이 호출을 처리하는 인스턴스에 대해 다시 새 FormLibrary.Form이 생성됩니다.

  4. 새롭게 생성 된 FormLibrary.Form의 ImageLoc을 반환합니다. 이전에 설정 한 것이 아닙니다.

+0

그건 나에게 의미가 있지만 어떻게 고칠 것이 좋습니다? – turbo

+0

나는 그것을 사용/수정 및 웹 서비스를 통해 그것을 다시 통과하여 그것을 해결 asp.net 응용 프로그램에 양식 개체를 전달 것이라고 몇 가지 생각을 줬어? 나는 지금 그것을 시도 할 것이다. – turbo

+1

FormLibrary.Form을 정적으로 저장할 수는 있지만 같은 양식을 공유하는 모든 페이지에서 종료 될 수 있습니다.이 양식은 아마도 좋지 않지만 각 프로젝트마다 다릅니다. 다른 방법은 세션이나 데이터베이스와 같은 일부 외부 저장소에 저장하는 것입니다. 또는 앱에서 실제로 두 번의 호출을 사용한다면 어쩌면 하나 만들어야할까요? 이 예에서 두 번째 호출은 의미가 없습니다. 첫 번째 전화는 필요한 것을 반환해야합니다. 이 대답이 유용하다고 생각한다면 upvote :) –

0

는 대신 OnPreRender의 OnPreRenderComplete 이벤트를 사용하여 시도 할 수 있습니다.

+0

동일한 문제가있었습니다. – turbo

0

때때로 디버거가 혼란스러워집니다. 다음을 시도하십시오 (모두 다시 작성하십시오) :

[WebMethod] 
public void NewForm(String parameters) 
{ 
    System.Diagnostics.Debugger.Break(); 
    form.ImageLoc = "http://www.prelovac.com/vladimir/wp-content/uploads/2008/03/example.jpg"; //breakpoint here, never hit 
} 
+0

아직도 여기까지 오지 않으므로, 그것이 부름을받지 않고 있다는 것을 의미합니까? – turbo

+0

오류 메시지가 표시됩니까? 테스트 사이에 IIS가 종료되고 다시 시작되었는지 (또는 서버가 지금까지 무엇인지) 확인 하시겠습니까? 프록시를 삭제하고 다시 추가하십시오. –

+0

오류 메시지가 없습니다. 기본적으로 웹 서비스를 사용하여 다른 프로그램에서 생성 된 일부 이미지에 액세스합니다 (아직 만들어지지 않았기 때문에 임의의 이미지를 사용하고 있습니다). 그 이미지를 내 asp.net 응용 프로그램에 전달하여 표시하려고합니다. 사용중인 서버를 다시 시작하려고했습니다. 프록시 클래스를 의미합니까? 나도 그걸 시도해 봤어. 나는 약간의 독서를했고 이것은 아마도 xml 파싱 문제는 당신이 webservices에서 개체를 전달할 때 발생하지만 그 해결책은 나를 위해 아무것도 변경하지 않았다 (프록시에서 양식 클래스를 삭제하고 FormLibrary를 사용하여 추가) – turbo

0

OnPreRender() 코드를 OnInit()로 이동해보십시오.

+0

아니요 변경, 여전히 중단 점을 건너 뛰고 예상대로 수행되지 않습니다. – turbo

+0

왜 그 점이 바뀌 었습니까? –

관련 문제