【发布时间】:2009-10-06 07:17:26
【问题描述】:
如何使用 WCF 编写服务以返回 iCal?我看到的示例使用 xml 或 json 作为格式化响应的方式。返回其他类型的响应正文的最佳方式是什么?
【问题讨论】:
如何使用 WCF 编写服务以返回 iCal?我看到的示例使用 xml 或 json 作为格式化响应的方式。返回其他类型的响应正文的最佳方式是什么?
【问题讨论】:
类似这样的:
[WebGet(UriTemplate="{id}.ics")]
[OperationContract]
Stream GetCalendar(int id)
{
WebOperationContext.Current.OutgoingResponse.ContentType="text/calendar";
//Now just return the appropriate data in iCal format in the Stream...
}
所以现在你可以做一个 HTTP GET 到例如yourService.svc/123.ics 并取回 iCal。
之所以可行,是因为“Stream”在 WCF REST 中是特例(用于非 XML、非 JSON 响应)。
请记住,您必须同时使用 WebHttpBinding 和 WebHttp 行为才能使其正常工作。
【讨论】:
最简单的解决方案是以 XML 或 JSON 格式(您的选择)作为 WCF 调用的简单字符串返回 iCal 表示:
[ServiceContract]
interface IMyCalService
{
[OperationContract]
string GetiCal(.......);
}
然后在您收到包含 iCal XML(或 JSON)的字符串后,继续在客户端上进一步处理它。这可以通过使用 SOAP 的标准 WCF 来完成。
其他方法可能是使用 WCF REST 服务,该服务在您点击特定 URL 时返回 iCal 格式的响应 - 这需要暂时安装 WCF Rest Starter Kit(在 .NET 3.0/3.5 中) .我对 iCal 格式并不十分熟悉,但我确信通过某种方式,您将能够构建必要的 XML 格式来满足 iCal 要求。
马克
【讨论】: