环境 windowsxp vs2008 ,
第一
打开 vs2008 ,新建一个 wcf服务库 项目 ,vs 会自动生成一个类,用于测试。
wcf服务库建立完成
第二
在解决方案中添加 新建 windows服务 项目,
在“设计”窗口中点右键 单击添加安装程序
这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。
单击 ServiceInstaller 组件并将 StartType 属性设置为Automatic
将serviceProcessInstaller类的Account属性改为 LocalSystem
然后添加4个引用
system.configuration
system.configuration.install
system.runtime.serialization
system.servicemodel
再把第一步建立的wcf服务库项目引用进来,
在 Service1.cs 中 添加代码 结果如下
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
ServiceHost s;
protected override void OnStart(string[] args)
{
s = new ServiceHost(typeof(WcfServiceLibrary1.Service1));
s.Open();
}
protected override void OnStop()
{
s.Close();
}
}
编译,不报错,
最后一步 把 wcf服务库项目 bin 文件夹 中的 config 文件 拷贝到 windows服务项目的bin 文件夹中并改名为 exe文件名+.config
例如 我的 windows服务项目 bin 中的exe文件名为 WindowsService1.exe,那么 config 文件名为 windowsService1.exe.config
测试 先安装windows服务 在 vs2008 命令行工具中 执行“installutil windowsService1.exe ”,安装成功后 ,在“管理工具-服务”中 启动 该服务, 再打开 config 文件 将 基址 url 复制 到 IE 中,看到说明 成功
到此 wcf服务库 在 windows服务中的托管 完成
第三
在解决方案中添加 新建 asp.net应用程序 项目,
把第一步建立的wcf服务库项目引用进来
复制wcf服务库项目 中app.config 配置信息
主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
<system.serviceModel>
<services>
<service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
name="WcfServiceLibrary1.Service1">
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary1.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfServiceLibrary1.Service1Behavior">
<!-- 为避免泄漏元数据信息,
请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="True"/>
<!-- 要接收故障异常详细信息以进行调试,
请将下值设置为 true。在部署前
设置为 false 以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
可以将 <baseAddresses> 节点 删掉 无用, 还可以将 wsHttpBinding 改为 basicHttpBinding ,和 webservice 兼容
复制到 web.config 的 <configuration> 节点中,
然后 在 asp.net 项目 中添加 文本文件 文件名随便起,后缀必须为 svc 例如 s1.svc
在文件中添加
<%@ServiceHost language=c# Debug="true" Service="WcfServiceLibrary1.Service1"%>
注意:Service 后面 内容 要和 config 中 service 节点 name 一致 ,否则 找不到 服务,
测试 在ie 中 http://localhost:1055/s1.svc 看到说明 成功
到此 wcf服务库 在 asp.net iis 中的托管 完成