Spring.Net框架与WCF的集成(上)
简单介绍一下通过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://files.cnblogs.com/tyb1222/SpringServiceHost.rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构