如何将旧的 href cgi 调用转换为新的 wcf 服务?
How to convert an old href cgi call to a new wcf service?
我编写了一个 WCF 服务,旨在替换一些失效的 cgi-bin 代码。原来的HTML调用cgi(return是访问新站点的Url)是这样的
href="http://example.com/cgi-bin/webring/list.cgi?ringid=xxx;siteid=47"
我正在尝试的新HTML是这样的:
href="http://example.com/webring.svc/RJump/47,xxx"
生成的 HTML 将被分发,添加到几个现有网站中。
我已经将 WCF 服务设置为 return 包含所需 Url 的纯文本字符串,但是当按下相关按钮(在原始站点上)时,浏览器只会打开一个(几乎)空白页面仅包含 Url 作为字符串,而不是打开它所指的页面。
我不确定是我的 HTML 不正确,还是服务 return 类型错误。这是界面:
[ServiceContract]
public interface IWebRing
{
// bare response for calling from HTML
[OperationContract]
[WebGet(UriTemplate = "/RJump/{data}", BodyStyle = WebMessageBodyStyle.Bare)]
System.IO.Stream RJump(string data);
}
这是(简化的)方法(我 'borrowed' 来自 here 的代码):
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;
}
我已经使用 javascript 和 async fetch()
使一切正常,但有些用户不想将脚本添加到他们的网站,所以这个替代解决方案必须是纯粹的 HTML (和原来一样)。
In your case, to return a raw string, set the ContentType to something
like "text/plain" and return your data as a stream.
您提供的 link 表示代码正在返回一个字符串。
如果您希望 WCF 服务生成 html 响应,您可以尝试下面的代码和提供的示例 link。
Is it possible in WCF REST 4 to return HTML as one of the response formats
Generating html Response from my WCF service
public XmlElement EchoWithGet(string s)
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
var x = new XmlDocument();
x.LoadXml("<x>123</x>");
return x.DocumentElement;
}
Xml方法是方法,但是使用xml将html和脚本注入页面:
public XmlElement RJump(string data)
{
String Url = functionOf(data);
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
var x = new XmlDocument();
x.LoadXml("<html><head><script>window.open('" + Url + "', '_self'); </script></head></html>");
return x.DocumentElement;
}
我编写了一个 WCF 服务,旨在替换一些失效的 cgi-bin 代码。原来的HTML调用cgi(return是访问新站点的Url)是这样的
href="http://example.com/cgi-bin/webring/list.cgi?ringid=xxx;siteid=47"
我正在尝试的新HTML是这样的:
href="http://example.com/webring.svc/RJump/47,xxx"
生成的 HTML 将被分发,添加到几个现有网站中。
我已经将 WCF 服务设置为 return 包含所需 Url 的纯文本字符串,但是当按下相关按钮(在原始站点上)时,浏览器只会打开一个(几乎)空白页面仅包含 Url 作为字符串,而不是打开它所指的页面。
我不确定是我的 HTML 不正确,还是服务 return 类型错误。这是界面:
[ServiceContract]
public interface IWebRing
{
// bare response for calling from HTML
[OperationContract]
[WebGet(UriTemplate = "/RJump/{data}", BodyStyle = WebMessageBodyStyle.Bare)]
System.IO.Stream RJump(string data);
}
这是(简化的)方法(我 'borrowed' 来自 here 的代码):
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;
}
我已经使用 javascript 和 async fetch()
使一切正常,但有些用户不想将脚本添加到他们的网站,所以这个替代解决方案必须是纯粹的 HTML (和原来一样)。
In your case, to return a raw string, set the ContentType to something like "text/plain" and return your data as a stream.
您提供的 link 表示代码正在返回一个字符串。
如果您希望 WCF 服务生成 html 响应,您可以尝试下面的代码和提供的示例 link。
Is it possible in WCF REST 4 to return HTML as one of the response formats
Generating html Response from my WCF service
public XmlElement EchoWithGet(string s)
{
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
var x = new XmlDocument();
x.LoadXml("<x>123</x>");
return x.DocumentElement;
}
Xml方法是方法,但是使用xml将html和脚本注入页面:
public XmlElement RJump(string data)
{
String Url = functionOf(data);
WebOperationContext.Current.OutgoingResponse.ContentType = "text/html";
var x = new XmlDocument();
x.LoadXml("<html><head><script>window.open('" + Url + "', '_self'); </script></head></html>");
return x.DocumentElement;
}