【发布时间】:2012-11-15 23:45:33
【问题描述】:
我已经创建了 WCF 服务,我想将数据库记录从 WCF 服务返回给客户端。
我的客户端应用程序检索显示在网页中的记录。客户开发他们的应用程序任何平台,如 PHP 或 JAVA 或 .NET。他们使用我的 WCF 服务来获取详细信息。
如何使用 XML 或任何其他方法将数据从 WCF 服务返回到客户端应用程序?
请对此提出建议/代码sn-p以解决我的疑问。
【问题讨论】:
我已经创建了 WCF 服务,我想将数据库记录从 WCF 服务返回给客户端。
我的客户端应用程序检索显示在网页中的记录。客户开发他们的应用程序任何平台,如 PHP 或 JAVA 或 .NET。他们使用我的 WCF 服务来获取详细信息。
如何使用 XML 或任何其他方法将数据从 WCF 服务返回到客户端应用程序?
请对此提出建议/代码sn-p以解决我的疑问。
【问题讨论】:
如果您将 WCF 部署为 basicHttpBinding,则会将您的 WCF 服务公开为旧版 ASMX Web 服务,以便旧客户端可以使用新服务并使用 SOAP 协议(基于 XML)公开您的数据。你也可以用wsHttpBinding 做类似的事情(更高级)。我建议使用基本的,因为您将从 PHP、Java 和 NET 中使用它。选择更简单的可能对你有用。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<!—- Default binding for basicHttpBinding -->
<basicHttpBinding>
<binding name="myBindingConfiguration1" closeTimeout="00:01:00" />
<binding name="myBindingConfiguration2" closeTimeout="00:02:00" />
<binding closeTimeout="00:03:00" />
</basicHttpBinding>
</bindings>
<services>
<!—- change to your namespace & contract details -->
<service name="MyNamespace.myServiceType">
<endpoint
address="myAddress" binding="basicHttpBinding"
bindingConfiguration="myBindingConfiguration1"
contract="MyContract" />
<endpoint
address="myAddress2" binding="basicHttpBinding"
bindingConfiguration="myBindingConfiguration2"
contract="MyContract" />
</service>
</services>
</system.serviceModel>
</configuration>
您可以获取更多信息here
您还可以配置 WCF 以将数据公开为 REST 协议 (WebHttpBinding)。该选项限制了 WCF 的功率。如果您打算通过 javascript 使用 WCF,可以尝试一下。
【讨论】:
您可以采用的最佳方法是使用 WebHttpBinding 公开 RESTful WCF 服务,该服务专为可互操作的 xml、json 对话而设计。然后任何客户端都可以向端点发出 HTTP 请求并获得纯 REST 结果。这种技术的一个缺点是您必须熟悉此处描述的 WCF RESTful 编程模型 http://msdn.microsoft.com/en-us/magazine/dd315413.aspx 您可以在此处找到关于此主题的全面讨论 http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/90716451-fd29-4917-a5ca-f7f3bcaa96c9
第二种方法,由于其简单性,您可能会更喜欢它,它是使用通过 PHP 内置 SoapClient 访问的 BasicHttpBinding 服务。有一个很好的来源说明了将 .Net 数据类型传输到 PHP 客户端。因此,您可以对数据使用相同的方法:Passing array of objects from WCF to PHP - extracting the info 请小心并正确设计具有 [DataContract]/[DataMember] 属性的数据协定类。
以下是 PHP WCF/BasicHttpIntegration 初学者:https://github.com/geersch/WcfServicesWithPhp5
REST 与 SOAP REST 限制 WCF 的能力并不是真的,它实际上对一些高级 WCF 功能确实如此,主要是因为 WebHttpBinding 的限制。但反过来,REST 比任何 RPC 协议(如 SOAP)更具互操作性。另外,在这种情况下,您可以获得轻量级 JSON 支持。 因此,您的决定取决于您的需求和系统的整体要求/架构。同意,如果您只需要向几个客户端提供类似对象的数据集(特别是如果它是本地系统,而不是通过 Internet 发布),那么为了简单起见,BasicHttpBinding/SOAP 最适合您。
还有一点需要提一下,很多 Web 服务要么是 RESTful,要么正在转换为 REST。微软也是如此。直接将数据传递到客户端浏览器是最好的方式(JS拿句柄)。
【讨论】: