Ich implementiere einen dynamischen ASMX-Webdienst über einen benutzerdefinierten HttpHandler, und mein Webdienst hat kürzlich die automatische Generierung von WSDL beendet. ? Wenn ich WSDL auf dem asmx URL, bekomme ich folgende Fehlermeldung:ASMX erzeugt keine WSDL, wenn Custom IHttpHandlerFactory verwendet wird
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()
Dies funktionierte gut vor einer Weile, so frage ich mich, ob es eine Datei Erlaubnis Problem ist irgendwo.
Eine Google-Suche gibt keinen Verweis auf diese bestimmte Situation zurück.
Ich bezweifle, dass mein Code für das Problem relevant ist; es hat sich nicht geändert:
[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;
}
}
Decompiling System.Web.Services.Protocols.DiscoveryServerProtocol.WriteReturns() zeigt, dass es die XML-Service-Beschreibung in einem Wörterbuch woanders erstellt nachschlägt.
Ich hatte gehofft, dass jemand, der mit dem DiscoverServerProtocol usw. vertraut ist, vielleicht weiß, unter welchen Umständen die XML-Dienstbeschreibung nicht erstellt werden kann.
Folgende funktioniert gut:
ServiceDescriptionReflector reflector = new ServiceDescriptionReflector();
reflector.Reflect(typeof(MyWebService), "...");
zu MyWebService.asmx Navigation zeigt alle Funktionen, und sie testen ermöglicht. Aber die Verwendung von WSDL gibt die obige Ausnahme.
Können wir einen Code sehen, oder sollen wir raten? Deine Entscheidung. –
Ich habe Codebeispiele hinzugefügt. Ich bezweifle jedoch, dass sie das Problem beleuchten werden. Ich hoffe, dass jemand, der mit den Interna von System.Web.Services.Protocols.DiscoveryServiceProtocol vertraut ist, möglicherweise weiß, unter welchen Umständen die WSDL nicht erstellt werden kann. –
Hallo, bist du mit dem hier gelandet? –