标签:
1 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 2 [ServiceContract] 3 public interface IService1 4 { 5 6 [OperationContract] 7 string GetData(int value); 8 9 [OperationContract] 10 CompositeType GetDataUsingDataContract(CompositeType composite); 11 12 // TODO: 在此添加您的服务操作 13 } 14 15 16 // 使用下面示例中说明的数据约定将复合类型添加到服务操作。 17 [DataContract] 18 public class CompositeType 19 { 20 bool boolValue = true; 21 string stringValue = "Hello "; 22 23 [DataMember] 24 public bool BoolValue 25 { 26 get { return boolValue; } 27 set { boolValue = value; } 28 } 29 30 [DataMember] 31 public string StringValue 32 { 33 get { return stringValue; } 34 set { stringValue = value; } 35 } 36 }
1 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。 2 // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。 3 public class Service1 : IService1 4 { 5 public string GetData(int value) 6 { 7 return string.Format("You entered: {0}", value); 8 } 9 10 public CompositeType GetDataUsingDataContract(CompositeType composite) 11 { 12 if (composite == null) 13 { 14 throw new ArgumentNullException("composite"); 15 } 16 if (composite.BoolValue) 17 { 18 composite.StringValue += "Suffix"; 19 } 20 return composite; 21 } 22 }
1 wcfFirst.Service1Client sc = new wcfFirst.Service1Client(); 2 3 string inputStr = Console.ReadLine(); 4 string outputStr = sc.GetData(int.Parse(inputStr)); 5 Console.WriteLine("WCF返回信息:" + outputStr); 6 7 8 wcfFirst.CompositeType ct = new wcfFirst.CompositeType(); 9 ct.StringValue = 1; 10 ct.BoolValue = true; 11 wcfFirst.CompositeType newCt = sc.GetDataUsingDataContract(ct); 12 Console.WriteLine("newCt.StringValue:" + newCt.StringValue);
Ø 3建立复杂的WCF项目
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 4 <appSettings> 5 <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 6 </appSettings> 7 <system.web> 8 <compilation debug="true" /> 9 </system.web> 10 <!-- 部署服务库项目时,必须将配置文件的内容添加到 11 主机的 app.config 文件中。System.Configuration 不支持库的配置文件。--> 12 <system.serviceModel> 13 <services> 14 <service name="WcfServiceLibrary1.Service1"> 15 <host> 16 <baseAddresses> 17 <add baseAddress = "http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/" /> 18 </baseAddresses> 19 </host> 20 <!-- Service Endpoints --> 21 <!-- 除非完全限定,否则地址将与上面提供的基址相关 --> 22 <endpoint address="" binding="basicHttpBinding" contract="WcfServiceLibrary1.IService1"> 23 <!-- 24 部署时,应删除或替换下列标识元素,以反映 25 用来运行所部署服务的标识。删除之后,WCF 将 26 自动推断相应标识。 27 --> 28 <identity> 29 <dns value="localhost"/> 30 </identity> 31 </endpoint> 32 <!-- Metadata Endpoints --> 33 <!-- 元数据交换终结点供相应的服务用于向客户端做自我介绍。 --> 34 <!-- 此终结点不使用安全绑定,应在部署前确保其安全或将其删除--> 35 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 36 </service> 37 </services> 38 <behaviors> 39 <serviceBehaviors> 40 <behavior> 41 <!-- 为避免泄漏元数据信息, 42 请在部署前将以下值设置为 false --> 43 <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> 44 <!-- 要接收故障异常详细信息以进行调试, 45 请将以下值设置为 true。在部署前设置为 false 46 以避免泄漏异常信息--> 47 <serviceDebug includeExceptionDetailInFaults="False" /> 48 </behavior> 49 </serviceBehaviors> 50 </behaviors> 51 </system.serviceModel> 52 53 </configuration>
注意:配置文件的内容修改一定要慎重,简单内容无所谓。有时候两个项目的配置文件看着明明一样可就是不能正常双工通信,直接复制文件过来是又可以正常使用。这个在后面双工那部分会详解。
https://<server>:<port>/<service>
Binding协议 | 传输协议 | 描述 |
basicHttpBinding |
http https |
最简单的绑定类型,通常用于 Web Services。使用 HTTP 协议,Text/XML 编码方式。 |
wsHttpBinding |
http https |
HTTP绑定的一种高级形式,比 BasicHttpBinding 更加安全,可以使用WSE中引入的所有额外功能,通常用于 non-duplex 服务通讯。 |
wsDualHttpBinding |
http |
扩展了WSHttpBinding功能,包含双向通信功能。 |
netTcpBinding | TCP |
用于TCP通信,允许配置安全性、事务处理等,效率高 |
netNamedPipeBinding | IPC |
在wcf应用程序中最适合本机进行安全通讯的binding,安全、可靠、高效 |
netMsmqBinding | MSMQ |
用于消息队列通信,支持排队 |
Binding协议的选择
标签:
原文地址:http://www.cnblogs.com/cyr2012/p/4249751.html