3

동안 프로그래밍 방식으로 ServiceReference를 추가 그것은 이후 내가 클라이언트 측 스크립트를 통해 참조 된 웹 서비스를 사용할 수 있도록 비동기 포스트 백시 PageScriptManager에 새 ServiceReference 인스턴스를 추가 할 수 있습니까?비동기 포스트 백

Page_Load 동안 ScriptReference를 프로그래밍 방식으로 추가하는 것이 여기에서 작동하지 않기 때문에 Repeater 안에있는 UserControl 안에이 작업을 수행하려고합니다.

편집 2 :

private void RegisterWebservice(Type webserviceType) 
{ 
    var scm = ScriptManager.GetCurrent(Page); 
    if (scm == null) 
     throw new InvalidOperationException("ScriptManager needed on the Page!"); 

    scm.Services.Add(new ServiceReference("~/" + webserviceType.Name + ".asmx")); 
} 

내 목표는 내입니다 :이 내가 (비동기 포스트 백시에 스크립트 관리자에 ServiceReference 추가) 기대하지 않는 내 UserControl에서 호출하는 코드입니다 내 UserControl 가능한 주변 응용 프로그램에 눈에 거슬리지 될; 그렇지 않으면 ServiceReference을 포함하여 Page에있는 ScriptManagerProxy에 정적으로 정의해야합니다. 이는 내가 원하는 것이 아닙니다.

편집 : 나는이 글을 쓸 때 나는 피곤해야합니다

... 내가 ServiceReference하지 ScriptReference를 작성하는 것을 의미하기 때문이다. 그에 따라 위 텍스트를 업데이트했습니다.

<asp:ScriptManagerProxy runat="server" ID="scmProxy"> 
    <Services> 
     <asp:ServiceReference Path="~/UsefulnessWebService.asmx" /> 
    </Services> 
</asp:ScriptManagerProxy> 

하지만 코드 숨김에서 웹 서비스를 등록 할 :

는 이제 있습니다.

+0

체크 아웃 내 업데이트 된 대답을! – Krunal

답변

1

편집 : 당신은 스크립트 관리자에 ServiceReference를 추가> 서비스 :

이 문제를 확인한 후, 여기가 작동하지 않는 이유는 페이지에서 수동으로 섹션. 1 개의 클라이언트 스크립트 include 지시문을 추가합니다.

예 :

<script src="TestService.asmx/jsdebug" type="text/javascript"></script> 

또는

당신이 당신의 Frontend.Web.YourScriptMethods에 대한 접근성을 제공
<script src="TestService.asmx/js" type="text/javascript"></script> 

, 당신은 비동기 포스트 백에 ServiceReference를 추가 지금

- 등의 클라이언트 스크립트는 추가하지 않습니다. 그래서 클라이언트 스크립트 오류가 발생합니다 - 메소드가 정의되지 않았습니다.

그러나 이것에 대해서는 해결 방법을 알아 냈습니다. 당신은 당신의 프로젝트/웹 서비스에 따라 "TestService.asmx"경로를 대체 할 수

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
    { 
     ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "testservice", "TestService.asmx/js"); 
    } 

을 (를 모르는 그것을 할 올바른 방법입니다).

이렇게하면 원하는 것을 얻을 수 있습니다. 이 도움이

희망,

Krunal Mevada


올드 Ans By의 :

사용은 다음

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
    { 
     ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("~/Service.asmx")); 
    } 
+0

이것은 내가 이미 수행하고있는 작업입니다 (위의 두 번째 EDIT 노트 참조). 불행히도 나를 위해 그것은 예상대로 작동하지 않습니다. – Oliver

+0

@Oliver - 클라이언트 측에서 서비스를 어떻게 사용하고 있습니까 ?? 설명 할 수 있니? – Krunal

+0

@Krunal - 내 웹 서비스는 Frontend.Web 네임 스페이스에 있으며 [ScriptService] 특성을 가지고 있으며 Submit, [ScriptMethod (ResponseFormat = ResponseFormat.Json)]이라는 메서드를 전달합니다. 그런 다음 클라이언트 측 JavaScript에서 'Frontend.Web.Submit (arguments);'을 호출합니다. - 그게 다야. 비동기 포스트 백 중에 ServiceReference를 추가하면 Frontend.Web.Submit이 클라이언트 측에서 정의되지 않습니다. – Oliver

2

이런 식으로 뭔가를 시도 ...

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
{ 
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "script1", "~/js/myjs.js"); 
} 
+0

예를 들어 주셔서 감사합니다, Krunal,하지만 실제로 ScriptRelease에 ServiceReference를 추가하려고합니다. 죄송합니다! 위의 게시물을 업데이트했습니다. – Oliver