WCF构建基于SOAP的服务

时间:2010-11-25 00:57:18

标签: wcf web-services soap

我正在尝试找到一些很好的教程,这些教程将向我展示使用WCF创建一个简单的基于SOAP的服务并进行部署。我一直在谷歌搜索过去2小时似乎找不到任何好的资源..任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:11)

至于资源:MSDN WCF Developer Center有从初学者的教程到文章和示例代码的所有内容。

另外,请查看screen cast library up on MSDN,了解一些非常有用的10-15分钟信息块,其中包含与您可能感兴趣的WCF相关的任何主题。

MSDN杂志中关于WCF各个方面的The Service Station文章也非常好 - 有些更基本,如Serialization in WCFWCF Bindings in Depth,有些更高级和深奥 - 但总是值得一看!

用于学习WCF和SOAP的

更新:,请查看,例如。

还有更多 - 在使用SOAP绑定的WCF上有一个的教程和学习材料 - 不仅仅是REST的东西!

答案 1 :(得分:2)

WCF服务的REST / SOAP端点

您可以在两个不同的端点中公开该服务。 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。 e.g。

公共接口ITestService {    [OperationContract的]    [WebGet]    字符串HelloWorld(字符串文本) }

注意,如果REST服务不在JSON中,则操作的参数不能包含复杂类型。 对于普通的旧XML作为返回格式,这是一个既适用于SOAP又适用于XML的示例。

[ServiceContract(Namespace = "http://test")]
public interface ITestService
{
[OperationContract]
[WebGet(UriTemplate = "accounts/{id}")]
Account[] GetAccount(string id);
}

REST Plain Old 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");

另一种方法是公开两个不同的服务合同,每个合同都有特定的配置。这可能会在代码级别生成一些重复项,但是在一天结束时,您希望使其正常工作。

答案 2 :(得分:0)

WCF是一种用于构建服务的技术。它不假定服务是SOAP服务或RESTFul或其他任何东西。您必须学习WCf基础知识,例如Service和DataContracts,Endpoints,Bindings等,以便能够使用任何类型的服务。

给出marc_s的链接非常有用。

就SOAP而言,它是一种格式\技术,用于将消息从一个端点传输到另一个端点。 WCF的绑定方面涵盖了此详细信息。当您公开和使用服务时,您只需选择使用SOAP的Binding。

因此,您应该使用marc_s给出的链接来学习WCF基础知识来构建服务。然后,您将了解如何构建服务以及选择使用SOAP的绑定。

希望这有帮助。