像标准 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?

iOS 应用程序的 WCF 或 Web 服务 (.asmx)?

WCF 服务而不是 ASMX Web 服务?

不同的 WSDL ASMX、WCF Web 服务

asmx 到 WCF 或 Web API

WCF 是提高标准还是仅仅提高了复杂性水平? [关闭]