从2018.10.23到2018.10.30中遇到的一些技术难点和解决方案
通过VS 2008创建一个空白的解决方案,添加如下四个项目。项目的类型、承载的功能和相互引用关系如下,整个项目在VS下的结构如图2所示。
- Contracts:一个类库项目,定义服务契约(Service Contract),引用System.ServiceMode程序集(WCF框架的绝大部分实现和API定义在该程序集中);
- Services:一个类库项目,提供对WCF服务的实现。定义在该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,所以Services具有对Contracts项目的引用;
- Hosting:一个控制台(Console)应用,实现对定义在Services项目中的服务的寄宿,该项目须要同时引用Contracts和Services两个项目和System.ServiceMode程序集;
- Client:一个控制台应用模拟服务的客户端,该项目引用System.ServiceMode程序集。--摘自蒋金楠的《我的WCF之旅(1)》
然后在Contracts中通过应用ServiceContractAttribute特性将接口定义成服务契约【ServiceContract】,然后在想要的操作方法上面显式地应用OperationContractAttribute特性。
服务契约创建完成之后,再来创建实现服务契约来创建具体的WCF服务
然后在通过代码来寄宿在控制台上
再来添加终结点和定义服务行为
1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3: <system.serviceModel>
4: <behaviors>
5: <serviceBehaviors>
6: <behavior name="metadataBehavior">
7: <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/calculatorservice/metadata" />
8: </behavior>
9: </serviceBehaviors>
10: </behaviors>
11: <services>
12: <service behaviorConfiguration="metadataBehavior" name="Artech.WcfServices.Services.CalculatorService">
13: <endpoint address="http://127.0.0.1:9999/calculatorservice" binding="wsHttpBinding" contract="Artech.WcfServices.Contracts.ICalculator" />
14: </service>
15: </services>
16: </system.serviceModel>
17: </configuration>
然后客户端再添加引用
![](https://img2018.cnblogs.com/blog/1523904/201810/1523904-20181030220156807-805275552.png)
然后就可以在客户端调用服务器端方法了!