简单介绍一下通过Spring.Net的IoC容器开发WCF 服务。
示例使用的Spring.Net 版本:1.3.2。本节介绍的是基于Spring.Net的IoC容器来开发WCF服
务。这种方式和之前WCF开发差别不大,只是服务的寄宿、以及客户端代理的创建都交由
Spring.Net来完成。以下通过一个简单示例进行说明。
publicinterface IAdd
{
[OperationContract]
int Add(int x, int y);
}
<!--提供服务的类-->
<object id="addSerivce" type="ServiceHost.AddService,ServiceHost" singleton="false"></object>
<object id="serviceFactory" type="Spring.ServiceModel.Activation.ServiceHostFactoryObject,Spring.Services">
<property name="TargetName" value="addSerivce"></property>
</object>
</objects>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="addSerivce" behaviorConfiguration="DefaultBehavior">
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:6633/"/>
</baseAddresses>
</host>
<endpoint address="AddService" binding="basicHttpBinding" contract="Contracts.IAdd"></endpoint>
</service>
</services>
</system.serviceModel>
为了寄宿服务,定义了一个继承自IFactoryObject的Spring.ServiceModel.Activation.
ServiceHostFactoryObject对象,并将它的TargetName属性指定为服务实现类(由于服务实现过于简单,就没有给出服务的实现。服务的类名为:AddService,处 于ServiceHost程序集下)。
之前name指定为类的全局限定名,即:程序集+类型名;使用Spring.Net的IoC后只需要将name设置为服务类型的定义的Id或者nane属性。
SpringServiceHost实例来寄宿服务;而SpringServiceHost也通过Spring.Net进行配置。
2、服务寄宿:
Console.WriteLine("Service is running...");
Console.Read();
3、客户端配置:
xmlns:wcf= " http://www.springframework.net/wcf ">
<wcf:channelFactory channelType= " Contracts.IAdd,Contracts "
endpointConfigurationName= " addService " id= " addService ">
</wcf:channelFactory>
</objects>
<spring>
<context>
<resource uri= " assembly://Client/Client.Config/WCFServiceConfig.xml "></resource>
</context>
</spring>
<system.serviceModel>
<client>
<endpoint address= " http://127.0.0.1:6633/AddService "
binding= " basicHttpBinding "
contract= " Contracts.IAdd " name= " addService "></endpoint>
</client>
</system.serviceModel>
本例中,将此配置放在单独的配置文件WCFServiceConfig.xml中,在 App.Config文件中对他的引用进行申明。
提示:
获取服务代理对象并调用服务:
{
Console.WriteLine(string.Format("invocation result is :{0}", proxy.Add(1, 2)));
(proxy as ICommunicationObject).Close();
}
Console.WriteLine(string.Format("invocation result is :{0}", proxy0.Add(5, 2)));
(proxy0 as ICommunicationObject).Close();
![](https://i-blog.csdnimg.cn/blog_migrate/e924474e6630c2a288d4b914bb3a7bc3.jpeg)
客户端端:
![](https://i-blog.csdnimg.cn/blog_migrate/51ae0fc29a85515291f7de846640fe0e.jpeg)