自己动手实现的wcf示例,像我一样的新手可以下载示例看一下,demo在本篇最后有下载链接。下面说明一下解决方案里的几个工程:
1、
公共 WcfContract 类库 定义wcf服务契约,通常是一个接口
2、
wcf服务端 a、MyWcfLib 类库 需要引用System.ServiceModel,WcfContract ,它具体实现了WcfContract 中接口的所有方法。
b、MyWcfWebHost web工程 需要引用System.ServiceModel,WcfContract 和MyWcfLib wcf的web宿主 便于对外调用
c、MyWcfWinHost winform工程 需要引用System.ServiceModel,WcfContract 和MyWcfLib wcf的winform宿主 用来启动wcf服务,然后外部即可调用打开的服务
注意:在实际项目中,b和c可能任选一个即可,这里全部给出示例完全是用来学习和参考。
3、
客户端
MyClient 控制台应用程序 System.ServiceModel和两个服务引用。
注意:这里的“客户端”指的是调用wcf服务的诸如web窗体项目,win窗体项目等等,示例给的是简单的控制台应用程序。
接着看两个配置文件:
a、MyWcfWebHost 工程下GetData文件夹下的web.config:
Code
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="GetDataServiceBehavior">
<!--httpGetEnabled - 指示是否发布服务元数据以便使用 HTTP/GET 请求进行检索,如果发布 WSDL,则为 true,否则为 false,默认值为 false-->
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<!--name - 提供服务的类名-->
<!--behaviorConfiguration - 指定相关的行为配置-->
<service name="MyWcfLib.GetDataService" behaviorConfiguration="GetDataServiceBehavior">
<!--address - 服务地址-->
<!--binding - 通信方式-->
<!--contract - 服务契约-->
<endpoint binding="basicHttpBinding" contract="WcfContract.IGetDataService" />
</service>
</services>
</system.serviceModel>
</configuration>
注释写的很清楚,注意类库名称和
contract="WcfContract.IGetDataService",不是太难,知道配置的含义就行了。
b、MyWcfWinHost 工程下的app.config :
Code
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<!-- 部署服务库项目时,必须将配置文件的内容添加到
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
<system.serviceModel>
<services>
<service behaviorConfiguration="MyWcfLib.GetDataServiceBehavior"
name="MyWcfLib.GetDataService">
<endpoint address="" binding="wsHttpBinding" contract="WcfContract.IGetDataService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:1234/MyGetDataService/GetDataService" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyWcfLib.GetDataServiceBehavior">
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="True"/>
<!-- 要接收故障异常详细信息以进行调试,
请将下值设置为 true。在部署前
设置为 false 以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
注意:“<serviceDebug includeExceptionDetailInFaults="True" />”这一行是对于wcf服务异常的一个配置,默认是“false”,这里是为了调试看到异常而设置为true的,在部署的时候千万要设置为“false”。
Demo下载:
WcfStudyDemo