用VS 2008开发WCF-最快速的WCF入门

第一步,打开VS 2008,然后新建一个项目,项目使用WCF类型,具体选择“WCF类库”。

什么都不用改,直接设置新建好了的WCF类库项目为启动项目,Ctrl+F5开始运行。

什么?类库不能直接运行?你且试试。

系统托盘会出现一个WCF服务主机的小图标,点击,查看这个WCF项目被分配为什么访问路径。

这样我们就新建好了一个WCF服务,其中的代码应该是默认的。

 

IService1.cs

[c-sharp] view plaincopyprint?
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.ServiceModel;
  6. using System.Text;
  7. namespace WcfServiceLibrary
  8. {
  9. // 注意: 如果更改此处的接口名称“IService1”,也必须更新 App.config 中对“IService1”的引用。
  10. [ServiceContract]
  11. publicinterface IService1
  12. {
  13. [OperationContract]
  14. string GetData(int value);
  15. [OperationContract]
  16. CompositeType GetDataUsingDataContract(CompositeType composite);
  17. // 任务: 在此处添加服务操作
  18. }
  19. // 使用下面示例中说明的数据协定将复合类型添加到服务操作
  20. [DataContract]
  21. publicclass CompositeType
  22. {
  23. bool boolValue = true;
  24. string stringValue = "Hello ";
  25. [DataMember]
  26. publicbool BoolValue
  27. {
  28. get { return boolValue; }
  29. set { boolValue = value; }
  30. }
  31. [DataMember]
  32. publicstring StringValue
  33. {
  34. get { return stringValue; }
  35. set { stringValue = value; }
  36. }
  37. }
  38. }

 

 

Service1.cs

[c-sharp] view plaincopyprint?
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.ServiceModel;
  6. using System.Text;
  7. namespace WcfServiceLibrary
  8. {
  9. // 注意: 如果更改此处的类名“IService1”,也必须更新 App.config 中对“IService1”的引用。
  10. publicclass Service1 : IService1
  11. {
  12. publicstring GetData(int value)
  13. {
  14. returnstring.Format("You entered: {0}", value);
  15. }
  16. public CompositeType GetDataUsingDataContract(CompositeType composite)
  17. {
  18. if (composite.BoolValue)
  19. {
  20. composite.StringValue += "Suffix";
  21. }
  22. return composite;
  23. }
  24. }
  25. }

 

 

App.config

[xhtml] view plaincopyprint?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <configuration>
  3. <system.web>
  4. <compilationdebug="true"/>
  5. </system.web>
  6. <!-- 部署服务库项目时,必须将配置文件的内容添加到
  7. 主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
  8. <system.serviceModel>
  9. <services>
  10. <servicename="WcfServiceLibrary.Service1"behaviorConfiguration="WcfServiceLibrary.Service1Behavior">
  11. <host>
  12. <baseAddresses>
  13. <addbaseAddress = "http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary/Service1/"/>
  14. </baseAddresses>
  15. </host>
  16. <!-- Service Endpoints -->
  17. <!-- 除非完全限定,否则地址将与上面提供的基址相关 -->
  18. <endpointaddress =""binding="wsHttpBinding"contract="WcfServiceLibrary.IService1">
  19. <!--
  20. 部署时,应删除或替换下列标识元素,以反映
  21. 在其下运行部署服务的标识。删除之后,WCF 将
  22. 自动推导相应标识。
  23. -->
  24. <identity>
  25. <dnsvalue="localhost"/>
  26. </identity>
  27. </endpoint>
  28. <!-- Metadata Endpoints -->
  29. <!-- 元数据交换终结点由服务用于向客户端做自我描述。-->
  30. <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除-->
  31. <endpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange"/>
  32. </service>
  33. </services>
  34. <behaviors>
  35. <serviceBehaviors>
  36. <behaviorname="WcfServiceLibrary.Service1Behavior">
  37. <!-- 为避免泄漏元数据信息,
  38. 请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
  39. <serviceMetadatahttpGetEnabled="True"/>
  40. <!-- 要接收故障异常详细信息以进行调试,
  41. 请将下值设置为 true。在部署前
  42. 设置为 false 以避免泄漏异常信息-->
  43. <serviceDebugincludeExceptionDetailInFaults="False"/>
  44. </behavior>
  45. </serviceBehaviors>
  46. </behaviors>
  47. </system.serviceModel>
  48. </configuration>

 

 

下面我们新建一个WindowsConsole项目(方便而已,你完全可以新建一个其它的,只要能输出结果就行)

在项目上右击,添加服务引用。

注:必须最低是.NET 3.0项目才会出现此选项,如果发现没有,请查看是否该项目创建版本低于3.0了

服务引用的地址就是刚才系统默认分配的地址

添加完成后,在代码中调用下面的代码,即可看到调用成功了

[c-sharp] view plaincopyprint?
  1. IService1 serv = new Service1Client();
  2. Console.WriteLine(serv.GetData(2));

根本不需要特意写一个HOST,因为VS已经提供WCF的服务主机了。

先跨进WCF的门槛,然后再慢慢研究如果托管,不是更好吗。

posted on 2012-11-07 17:51  wencansz  阅读(259)  评论(0编辑  收藏  举报