Я внедряю динамический веб-сервис ASMX через пользовательский HttpHandler, и мой веб-сервис недавно прекратил генерировать WSDL автоматически. Когда я использую? WSDL в URL-адресе asmx, я получаю следующую ошибку:
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 дает исключение выше.