2009-08-24 2 views
1

사용자 정의 HttpHandler를 통해 동적 ASMX 웹 서비스를 구현 중이며 웹 서비스가 자동으로 WSDL 생성을 중지했습니다. ?사용자 정의 IHttpHandlerFactory를 사용할 때 ASMX가 WSDL을 생성하지 않습니다.

System.InvalidOperationException: XML Web service description was not found. 
    at System.Web.Services.Protocols.DiscoveryServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream) 
    at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues) 
    at System.Web.Services.Protocols.WebServiceHandler.Invoke() 

이 얼마 전에 잘 작동, 그래서 어딘가 파일 권한 문제가 있는지 궁금 해요 : 내가 사용하는 경우 ASMX의 URL을 WSDL, 나는 다음과 같은 오류가 발생합니다.

Google 검색은이 특정 상황에 대한 참조를 반환하지 않습니다.

나는 내 코드가 문제와 관련이 있는지 의심 스럽다.()

[WebService(Description = "...", Namespace = "...")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
public class MyWebService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    void MyWebMethod() {} 
} 

public class VirtualWebServiceFactory : IHttpHandlerFactory 
{ 
    public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) 
    { 
     WebServiceHandlerFactory wshf = new WebServiceHandlerFactory(); 
     MethodInfo coreGetHandler = wshf.GetType().GetMethod("CoreGetHandler", BindingFlags.NonPublic | BindingFlags.Instance); 
     IHttpHandler handler = (IHttpHandler)coreGetHandler.Invoke(wshf, new object[] { typeof(MyWebService), context, context.Request, context.Response });  
     return handler; 
    } 
} 

디 컴파일 System.Web.Services.Protocols.DiscoveryServerProtocol.WriteReturns 그것을 다른 곳에서 만든 사전에 XML 서비스 설명을 보이는 것을 알 수 : 그것은 변경되지 않았습니다.

DiscoverServerProtocol 등에 익숙한 사람이 XML 서비스 설명을 빌드하지 못할 수도있는 상황을 알기를 기대했습니다.

잘 다음 작품 :

ServiceDescriptionReflector reflector = new ServiceDescriptionReflector(); 
reflector.Reflect(typeof(MyWebService), "..."); 

이 MyWebService.asmx에 탐색은 모든 기능을 표시하고 테스트를 허용한다. 그러나? WSDL을 사용하면 위의 예외가 발생합니다.

+0

일부 코드가 보일 까? 아니면 추측해야합니까? 너의 선택. –

+0

코드 예제를 추가했습니다. 나는 그들이 문제에 대해 어떤 생각을 밝힐 지 의심 스럽다. System.Web.Services.Protocols.DiscoveryServiceProtocol의 내부에 익숙한 사람이 WSDL을 작성할 수없는 상황을 알 수 있기를 바랍니다. –

+0

안녕하세요, 어디서 났습니까? –

답변

0

흠, 많은 달 후에 URL에 개인 기능 초크를 만든 WSDL 이외의 다른 매개 변수가 포함되도록 다시 작성 되었음이 밝혀졌습니다.

0

그냥 재미 있기 때문에 WebMethod을 공개 해보세요.

그러나 실제 응답은 호출 할 의도가없는 .NET Framework 코드로 해결하지 않는 것입니다. GetHandler으로 전화하는 것이 잘못된 이유는 무엇입니까? 애매한 계급의 내부에서 어지럽히 지 않고 성취 할 수없는 여기에서 성취하려는 것은 무엇입니까?

+0

GetHandler() 및 CoreGetHandler()의 매개 변수의 차이점에 유의하십시오. CoreGetHandler()는 웹 서비스 메서드 및 (최근까지) WSDL을 나열하는 기본 페이지를 제공하는 처리기를 반환합니다. 내가 수행하려고하는 작업은 실제 .asmx 파일없이 가상 웹 서비스를 제공하는 것입니다. –

+0

다시 말하지만, 나는 레거시 기술 (ASMX)을 가지고 노는 것이 아니며, 무엇이든 해낼 것으로 기대합니다. Reflection을 사용하여 문서화되지 않은 내부 메서드를 호출 할 필요가없는 실제 확장 성 아키텍처가있는 WCF로 이동합니다. –

+0

불행히도 나는 언제든지 곧 WCF로 이동할 거의 기회없이 대규모 레거시 코드 기반으로 작업하고 있습니다. –

관련 문제