首页 > 代码库 > WCF--建立简单的WCF服务
WCF--建立简单的WCF服务
[ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); [Operation Contract] CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: Add your service operations here } // Use a data contract as illustrated in the sample below to add composite types to service operations. [DataContract] public class CompositeType { bool boolValue = http://www.mamicode.com/true;"Hello "; [DataMember] public bool BoolValue { get {return boolValue; } set {boolValue = http://www.mamicode.com/value; }>
能够看到。声明了服务契约IService1,以接口形式声明,当中还包括两个操作契约GetData以及GetDataUsingDataContract。还声明了数据契约CompositeType,以类的形式声明。包括两个数据成员BoolValue和StringValue。
三、WCF应用中的服务功能实现(ServiceBehavior)在生成的WCF应用中,Service1.svc.cs中为“ServiceBehavior”(本例中契约和服务放在同一个project下了。实际上也能够分为两个project),代码例如以下(Service1.svc还有其他作用。后面再说):public class Service1 : IService1 { public string GetData(int value) { return string.Format("You entered: {0}",value); } public CompositeType GetDataUsingDataContract(CompositeType composite) { if (composite== null) { throw new ArgumentNullException("composite"); } if (composite.BoolValue) { composite.StringValue+= "Suffix"; } return composite; } }
能够看到。这个Service1类实现了在契约中声明的IService1接口(服务契约),也使用到了CompositeType类(数据契约)。实现了GetData以及GetDataUsingDataContract这两个服务契约中功能,这些功能即为WCF服务同意外部程序进行调用的功能。四、寄宿(Host)WCF服务有2种常见的寄宿方式:1)一种是为一组WCF服务创建一个托管的应用程序,通过手工启动程序的方式对服务进行寄宿。全部的托管的应用程序均可作为WCF服务的宿主,比方 Console应用、Windows Forms应用和ASP.NET应用等,我们把这样的方式的服务寄宿方式称为自我寄宿(Self Hosting)。2)还有一种则是通过操作系统现有的进程激活方式为WCF服务提过宿主,Windows下的进程激活手段包含IIS、Windows Service或者WAS(Windows Process Activation Service)等不管採用哪种寄宿方式,在为某个服务创建 ServiceHost的过程中,WCF框架内部会运行一系列的操作,当中最重要的步骤就是为服务创建服务描写叙述(Service Description)本例以第一种为例,建立一个WinForm应用作为托管程序。在VS2010中。建立一个普通的WinForm程序(以frameword4.0为例),例如以下图:
本例在VS2010下,通过Tools-WCF Service Configeration Editor工具生成。
<?xml version="1.0" encoding="utf-8"?把该App.config文件放在与WinFormproject的根文件夹下(与Form1.cs同一文件夹),还须要在VS中将该文件增加到project中。> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="NewBehavior0"> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8585/wcf1/metadata" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="NewBehavior0" name="WcfService1.Service1"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" name="ep1" contract="WcfService1.IService1" /> <host> <baseAddresses> <add baseAddress="http://localhost:8585/wcf1" /> </baseAddresses> </host> </service> </services> </system.serviceModel> </configuration>
private void button1_Click(objectsender, EventArgs e) { System.ServiceModel.ServiceHosthost =new System.ServiceModel.ServiceHost(typeof(WcfService1.Service1)); host.Open(); this.label1.Text= "opened"; }
ServiceReference1.Service1Clientaa=newServiceReference1.Service1Client(); MessageBox.Show(aa.GetData(2));六、总结
WCF--建立简单的WCF服务