GOOGLE ADS

domingo, 17 de abril de 2022

¿Cómo convertir una antigua llamada href cgi a un nuevo servicio wcf?

He escrito un servicio WCF que está diseñado para reemplazar un código cgi-bin extinto. El HTML original que llama al cgi (que devuelve la URL de un nuevo sitio para visitar) era así

href="http://example.com/cgi-bin/webring/list.cgi?ringid=xxx;siteid=47"

El nuevo HTML que estoy probando es este:

href="http://example.com/webring.svc/RJump/47,xxx"

El HTML resultante se distribuirá y se agregará a varios sitios web existentes.

Configuré el servicio WCF para devolver una cadena de texto sin formato que contiene la URL requerida, pero cuando se presiona el botón correspondiente (en el sitio de origen), el navegador simplemente abre una página (casi) en blanco que contiene solo la URL como una cadena, en lugar de abrir la página a la que se refiere.

No estoy seguro de si es solo que mi HTML es incorrecto o si el servicio devuelve el tipo incorrecto. Aquí está la interfaz:

[ServiceContract]
public interface IWebRing
{
// bare response for calling from HTML
[OperationContract]
[WebGet(UriTemplate = "/RJump/{data}", BodyStyle = WebMessageBodyStyle.Bare)]
System.IO.Stream RJump(string data);
}

y este es el método (simplificado) ('tomé prestado' el código de aquí ):

public System.IO.Stream RJump(string data)
{
string Url = "http://example.net";
// 'data' will define which site is actually required
System.ServiceModel.Web.OutgoingWebResponseContext context = System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse;
context.Headers.Add(System.Net.HttpResponseHeader.CacheControl, "public");
context.ContentType = "text/plain";
context.LastModified = DateTime.Now;
context.StatusCode = System.Net.HttpStatusCode.OK;
System.IO.Stream result = new System.IO.MemoryStream(System.Text.ASCIIEncoding.Default.GetBytes(Url));
return result;
}

Ya había hecho que todo funcionara con javascript y an async fetch(), pero algunos usuarios no quieren agregar secuencias de comandos a sus sitios, por lo que esta solución alternativa debe ser HTML puro (como era el original).


Solución del problema

En su caso, para devolver una cadena sin procesar, establezca ContentType en algo como "texto/simple" y devuelva sus datos como una secuencia.

El enlace que proporcionó dice que el código está devolviendo una cadena.
Si desea que el servicio WCF genere una respuesta html, puede probar el código a continuación y el enlace de muestra proporcionado.
¿Es posible en WCF REST 4 devolver HTML como uno de los formatos de respuesta
Generando respuesta html desde mi servicio WCF

 public XmlElement EchoWithGet(string s)
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
var x = new XmlDocument();
x.LoadXml("<x>123</x>");
return x.DocumentElement;
}

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...