使用 WCF(Windows Communication Framework)的简单 Web 服务






4.89/5 (26投票s)
2007年1月2日
3分钟阅读

352072

7758
本文向您展示了使用 Windows Communication Framework 设置 Web 服务是多么容易。
引言
本文向您展示了使用 WCF (Windows Communication Framework) 设置 Web 服务是多么容易。 使用我提供的源代码作为模板,您可以快速创建自己的 Web 服务。 本文不涉及客户端使用 Web 服务(您需要等到第 2 部分)。
背景
我一直在使用 WCF,自从早期的 CTP 版本以来。 我发现很难找到好的示例/例子。 要么它们不起作用,要么我太懒或太笨而无法让它们工作。 我只想要一些只需很少的努力(或理解)就能工作的东西。 我只是想要一些我可以安装并运行的东西!!!
当然,在某个时候,每个人都必须理解 ABC (但这可以等到以后再说)。 当您开始学习一项新技术时,特别是 Beta 版或 CPT - 您只是希望它能够工作,弄清楚它是如何工作的可以等到以后再说......
所以我编写了一个简单的 WCF Web 服务,您可以下载并在几分钟内运行它(适用于像我这样的懒惰的开发人员!)
入门
您需要 Visual Studio 2005(它可能与其他版本的 Visual Studio 一起使用,但我没有在其中进行测试,而且我也不打算测试!!),以及 .NET 3.0(我建议从 这里获取整个包)。
然后从上面下载源代码。
使用代码
下载示例代码并在 Visual Studio 2005 中打开解决方案。
有两个项目,Web 服务和类的实现。[图 1]

图 1 - 显示了 2 个项目
我选择使用 Visual Studio 中内置的开发 Web 服务器,它更容易,设置更少,修改更少。 但是没有理由不使用 IIS(如果你知道如何使用它)。 当您的代码投入生产时,您将使用 IIS,但现在我暂时不理会它。
Web 服务有两个部分,.svc 文件和 *web.config*。
WCFService.svc
<% @ServiceHost Service="WCFSample.EchoImplementation"%>
Web.Config
<system.serviceModel>
<services>
<service name="WCFSample.EchoImplementation"
behaviorConfiguration="returnFaults">
<endpoint contract="WCFSample.IEchoContract"
binding="basicHttpBinding"/>
<endpoint contract="IMetadataExchange"
binding="mexHttpBinding" address="mex">
</endpoint>
</service>
</services>
WCFService.svc 文件中 ServiceHost
属性的 Service
应该与 *web.config* 中的某个服务名称匹配。 服务名称
和 终结点协定
都应与 WCF 项目模板中的实现和协定匹配。
WCF 项目模板由 3 部分组成,协定
[数据协定或消息]、实现和接口 [ServiceContract]
(是的,ABC 必须在某个地方出现)。
服务协定
WCFContract.cs 包含此服务的接口。
[ServiceContract]
interface IEchoContract
{
[OperationContract]
EchoMessage Echo(EchoMessage Message);
}
数据协定
在 *WCFContract.cs* 中包含了发送的 Message
[DataContract]
public class EchoMessage
{
private string _OutMessage;
private string _ReturnMessage;
[DataMember]
public string OutMessage
{
get { return _OutMessage; }
set { _OutMessage = value; }
}
[DataMember]
public string ReturnMessage
{
get { return _ReturnMessage; }
set { _ReturnMessage = value; }
}
}
实现
Web 服务的实现在 *WCFImplementation.cs* 中
class EchoImplementation : IEchoContract
{
public EchoMessage Echo(EchoMessage Message)
{
EchoMessage _returningMessage = new EchoMessage();
_returningMessage.ReturnMessage = Message.OutMessage;
return _returningMessage;
}
}
在此示例中,我使用 EchoMessage
在客户端和 Web 服务之间传递数据,但它可以是任何具有 [DataContract]
属性的类。
开始吧...
现在轮到你了。 代码示例是一个非常简单的服务,但可以复制该结构用于其他 Web 服务,可以扩展该示例,以便在 .svc 文件和类之间存在一对多或多对多的关系。
历史
- 2007 年 1 月 1 日 - 发布初始版本