public WsdlTemplateBase GetWsdlTemplate(XsdMetadata operations, string baseUri, bool optimizeForFlash, string rawUrl, string serviceName) { var xsd = new XsdGenerator { OperationTypes = operations.GetAllTypes(), OptimizeForFlash = optimizeForFlash, }.ToString(); var soapFormat = GetType().Name.StartsWith("Soap11", StringComparison.OrdinalIgnoreCase) ? Format.Soap11 : Format.Soap12; var wsdlTemplate = GetWsdlTemplate(); wsdlTemplate.Xsd = xsd; wsdlTemplate.ServiceName = serviceName; wsdlTemplate.ReplyOperationNames = operations.GetReplyOperationNames(soapFormat); wsdlTemplate.OneWayOperationNames = operations.GetOneWayOperationNames(soapFormat); if (rawUrl.ToLower().StartsWith(baseUri)) { wsdlTemplate.ReplyEndpointUri = rawUrl; wsdlTemplate.OneWayEndpointUri = rawUrl; } else { var suffix = soapFormat == Format.Soap11 ? "soap11" : "soap12"; wsdlTemplate.ReplyEndpointUri = baseUri + suffix; wsdlTemplate.OneWayEndpointUri = baseUri + suffix; } return wsdlTemplate; }
public void Execute(IHttpRequest httpReq, IHttpResponse httpRes) { EndpointHost.Config.AssertFeatures(Feature.Metadata); httpRes.ContentType = "text/xml"; var baseUri = httpReq.GetParentBaseUrl(); var optimizeForFlash = httpReq.QueryString["flash"] != null; var operations = new XsdMetadata(EndpointHost.Metadata, flash: optimizeForFlash); try { var wsdlTemplate = GetWsdlTemplate(operations, baseUri, optimizeForFlash, httpReq.ResolveBaseUrl(), EndpointHost.Config.SoapServiceName); httpRes.Write(wsdlTemplate.ToString()); } catch (Exception ex) { log.Error("Autogeneration of WSDL failed.", ex); httpRes.Write("Autogenerated WSDLs are not supported " + (Env.IsMono ? "on Mono" : "with this configuration")); } }