【发布时间】:2010-11-25 00:57:17
【问题描述】:
我正在尝试找到一些好的教程,这些教程将向我展示如何使用 WCF 创建一个简单的基于 SOAP 的服务并进行部署。过去 2 小时我一直在谷歌上搜索,似乎找不到任何好的资源.. 谁能帮帮我?
【问题讨论】:
标签: wcf web-services soap
我正在尝试找到一些好的教程,这些教程将向我展示如何使用 WCF 创建一个简单的基于 SOAP 的服务并进行部署。过去 2 小时我一直在谷歌上搜索,似乎找不到任何好的资源.. 谁能帮帮我?
【问题讨论】:
标签: wcf web-services soap
至于资源:MSDN WCF Developer Center 包含从初学者教程到文章和示例代码的所有内容。
此外,请查看screen cast library up on MSDN,了解一些非常有用的 10-15 分钟信息块,这些信息几乎涉及您可能感兴趣的任何与 WCF 相关的主题。
MSDN 杂志上关于 WCF 各个方面的 The Service Station 文章也非常好 - 一些更基本的,如 Serialization in WCF 或 WCF Bindings in Depth,一些更高级和深奥 - 但总是值得一看!
更新:关于学习 WCF 和 SOAP,请查看例如
还有更多 - 有吨关于使用 SOAP 绑定的 WCF 的教程和学习材料 - 肯定不仅仅是 REST 的东西!
【讨论】:
您可以在两个不同的端点中公开服务。 SOAP 可以使用支持 SOAP 的绑定,例如basicHttpBinding,RESTful 可以使用 webHttpBinding。我假设您的 REST 服务将采用 JSON 格式,在这种情况下,您需要使用以下行为配置来配置两个端点
<endpointBehaviors>
<behavior name="jsonBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
您的场景中的端点配置示例是
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="json" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" contract="ITestService"/>
</service>
</services>
所以,该服务将在
http://www.example.com/soap http://www.example.com/json 将 [WebGet] 应用于操作合约,使其成为 RESTful。例如
公共接口 ITestService { [运营合同] [网络获取] 字符串 HelloWorld(字符串文本) }
注意,如果 REST 服务不是 JSON 格式,则操作的参数不能包含复杂类型。 对于作为返回格式的普通旧 XML,这是一个适用于 SOAP 和 XML 的示例。
[ServiceContract(Namespace = "http://test")]
public interface ITestService
{
[OperationContract]
[WebGet(UriTemplate = "accounts/{id}")]
Account[] GetAccount(string id);
}
REST 普通旧 XML 的 POX 行为
<behavior name="poxBehavior">
<webHttp/>
</behavior>
端点
<services>
<service name="TestService">
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
</services>
服务将在
http://www.example.com/soap
http://www.example.com/xml
REST 请求在浏览器中尝试,
http://www.example.com/xml/accounts/A123
添加服务引用后 SOAP 服务的 SOAP 请求客户端端点配置,
<client>
<endpoint address="http://www.example.com/soap" binding="basicHttpBinding"
contract="ITestService" name="BasicHttpBinding_ITestService" />
在 C# 中
TestServiceClient client = new TestServiceClient();
client.GetAccount("A123");
另一种方法是公开两个不同的服务合同,每个服务合同都有特定的配置。这可能会在代码级别生成一些重复项,但最终,您希望使其正常工作。
【讨论】:
WCF 是一种用于构建服务的技术。它不假定这些服务是 SOAP 服务或 RESTFul 或其他任何东西。您必须学习 WCf 基础知识,例如 Service 和 DataContracts、Endpoints、Bindings 等,才能使用任何类型的服务。
marc_s 提供的链接对此非常有帮助。
现在就 SOAP 而言,它是一种用于将消息从一个端点传输到另一个端点的格式\技术。 WCF 的绑定方面涵盖了此详细信息。当您公开和使用服务时,您只需选择一个使用 SOAP 的 Binding。
因此,您应该使用 marc_s 提供的链接学习 WCF 基础知识来构建服务。然后您将知道如何构建服务以及选择使用 SOAP 的绑定。
希望这会有所帮助。
【讨论】: