或许这个标题会让你觉得很是不解.
还是先说说为什么会产生这个荒唐的想法吧:
对于 WCF 来说最应该出现的地方应该是 IIS 中, MSDN 上的例子也是以 IIS 作宿主的居多. 但是我要存放的东西并不多, 所以我并不想用 IIS, 对于静态的页面和 Silverlight 倒还好说, 用 F# 实现的异步并发袖珍静态网站服务器在响应速度方面一点也不亚于 IIS. 至于 WCF, 几经打拼终于自承载了(Self-Host) .
一切看起来已经没问题了, 可是我又一次败给了我的完美主义… 之前因为要解决 Silverlight 的跨域访问, 曾经在官方论坛上使用了一种构造 Message 的方法成功的把 clientaccesspolicy.xml 返回给客户端了, 这让我变的不安分起来, 要是我能把任意类型的文件返回给浏览器, 那我还自己实现网站服务器做什么?
本来应该承载在网站中的 WCF, 如今却要扮演网站的角色, 你中有我, 我中有你, 这听起来很有趣, 我曾经这样解释给我的一个朋友听: 我要养鱼, 可我不想麻烦换水, 我希望我的鱼自己会吐出清洁富含氧气的水.
但是如何实现呢? 似乎不管是什么都逃不过序列化这一关,
返回字符串?
结果根结点是 String.
返回 FileStream 或 MemoryStream?
够狠! 根结点仍然是序列化后的结果.
构造 Message 么?
我有想过, 我曾经想改变 Xml 数据主根结点名为 html, 但字符串内容被转义丢失了所有符号.
为此郁闷了好久, 但结果却让我非常意外, 以至于我都不想写什么演示代码
微软其实早就留好了后门: Stream
对~ 就是这么简单 你只要把各种流 Upcast 为 Stream 就 OK 了! 哭~
感谢和羡慕官方论坛上的 rico.sauve, 能用英文做关键词来进行搜索真好, 我就是找不到中文资料又不知道英文如何表述所以才会郁闷这么久…
参考:
How to: Create a Service That Returns Arbitrary Data Using The WCF Web Programming Model