像标准 ASMX Web 服务一样查询 WCF
Posted
技术标签:
【中文标题】像标准 ASMX Web 服务一样查询 WCF【英文标题】:Query WCF like standard ASMX web service 【发布时间】:2011-04-25 12:26:37 【问题描述】:我最近刚刚构建了一个通过 WCF 与服务器通信的 Silverlight 应用程序。我们来回交流的数据是无缝的,老实说,很容易实现(w/SL)。不幸的是,我需要能够从 WCF 请求相同的信息,类似于 ASMX Web 服务。现在,我正在本地运行该服务(http://localhost/aps.svc),但我无法通过 Web 浏览器“调用”任何方法(类似于 asmx Web 服务)。例如:http://FooBar/Service/servic.aspx?op=GetName 将返回一个名称。我需要这种能力,因为我们的第 3 方软件仅限于使用 web asmx 服务,我想使用已经构建的 WCF。
总的来说,我对 WCF 和 Web 服务还很陌生 - 所以任何帮助都将不胜感激!
-汤姆
【问题讨论】:
【参考方案1】:为了直接在浏览器中使用您的 WCF 服务,您需要切换到 REST 样式的 WCF 服务。
有关 WCF 和 REST 的大量信息,请参阅WCF REST Developer Center。
基本上,使用 WCF REST,您可以将域中的所有内容“寻址”为资源; REST 是面向资源的,而 SOAP/ASMX 是面向操作的。
所以你的方法中可能不会有类似op=GetName
的东西,而是类似的东西:
http://yourserver/YourWCFRESTService.svc/SomeObjectOrResource/Name
这将返回该对象或资源的名称“对象”,作为 XML 或 JSON 数据流。
【讨论】:
太棒了!我会在今天下午晚些时候试试这个,然后告诉你进展如何。【参考方案2】:正如 marc_s 所提到的,如果您将 REST 转换或将其作为一个端点,那么您可以让它工作。
[OperationContract(Name = "RetrieveUser")]
[WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/op")]
public System.IO.Stream RetrieveUser(String op) ...
这可能会让你得到运营商,然后正确响应。
我所做的是有一个控制器来完成工作,而我的 SOAP 和 REST 服务只处理获取请求并以正确的格式发回。
【讨论】:
谢谢詹姆斯 - 今天下午我要试试这些。我会告诉你进展如何。【参考方案3】:类似于this 和this。总而言之,我觉得做不到。
【讨论】:
以上是关于像标准 ASMX Web 服务一样查询 WCF的主要内容,如果未能解决你的问题,请参考以下文章
选择啥? .net 3.5 中的 ASMX Web 服务或 WCF?