我正在通过自定义HttpHandler实现动态ASMX Web服务,我的Web服务最近自动停止生成WSDL。当我在asmx url上使用?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()
前一段时间此功能正常,所以我想知道某处是否存在文件权限问题。
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)
只是为了好玩,试着让你的WebMethod
公开。
但是,真正的答案是不要使用不打算调用的.NET Framework代码。只是致电GetHandler
有什么问题?你想在这里完成什么,如果不在一个晦涩的班级内部搞乱,就无法实现?
答案 1 :(得分:0)
嗯,经过几个月,发现URL正在被重写,以包含除WSDL之外的其他参数,这使得私有函数窒息。