概述


85374发布的版本增加在IoC中集成远程调用方式,即对于使用服务者来说,获取服务对象是远程对象,但是是透明的,使用者勿需关心服务实现者是在本地还是在远程。
注意:WCF需要.NET 3.0及以上,一般是用.NET 3.5;所以需要引用HTB.DevFx.dll

使用WCF技术发布服务(服务端)

注意:服务契约接口的定义需要添加ServiceContractAttribute以及在相应的服务方法添加OperationContractAttribute

Web宿主

请遵守WCF的配置规范来发布服务,WCF已经做的很强大了,DevFx并不需要做任何扩展。
注意在.NET 3.5中,需要.svc来发布服务;.NET 4就不需要了。详情参见http://social.msdn.microsoft.com/Forums/en-SG/wcf/thread/ee85ee3c-6131-45de-978f-f14b88e16e19

非Web宿主

DevFx提供一种比较简单的发布服务的方式
配置格式如下:
<?xml version="1.0"?>
<configuration>
	<configSections>
		<section name="htb.devfx" type="HTB.DevFx.Config.ConfigSectionHandler, HTB.DevFx.BaseFx" />
	</configSections>

	<htb.devfx>
		<remoting>
			<services>
				<add name="classService.svc" type=":wcf" serviceType="ConsoleApplication3.ClassServiceInternal, ConsoleApplication3" />
				<!--type固定为":wcf",serviceType为服务实现的类型-->
			</services>
		</remoting>
	</htb.devfx>

	<system.serviceModel><!--这里是标准的WCF配置-->
		<services>
			<service name="ConsoleApplication3.ClassServiceInternal">
				<host>
					<baseAddresses>
						<add baseAddress="http://localhost:8080/WcfSamples/" />
					</baseAddresses>
				</host>
				<endpoint address="classService.svc" binding="basicHttpBinding" contract="ClassLibrary2.IClassService" />
			</service>
		</services>
	</system.serviceModel>
</configuration>
请按如下进行初始化:
using System;
using ClassLibrary2;
using HTB.DevFx.Remoting;

namespace ConsoleApplication2
{
	class Program
	{
		static void Main(string[] args) {
			RemotingHelper.RemotingServiceInitialize();
			Console.WriteLine("Ready....");
			Console.ReadLine();
		}
	}
}

使用WCF技术调用服务(客户端)

按如下格式配置IoC
<?xml version="1.0"?>
<configuration>
	<configSections>
		<section name="htb.devfx" type="HTB.DevFx.Config.ConfigSectionHandler, HTB.DevFx.BaseFx" />
	</configSections>

	<htb.devfx>
		<objects configSet="{tag:'object'}">
			<object name="ClassServiceClient" type="ClassLibrary2.IClassService, ClassLibrary2" mapTo="http://localhost:8080/WcfSamples/classService.svc" builder="@RemotingObjectBuilder" />
		</objects>
	</htb.devfx>
</configuration>
按一般方式获取和调用服务:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClassLibrary2;
using HTB.DevFx;

namespace ConsoleApplication4
{
	class Program
	{
		static void Main(string[] args) {
			var svr = ObjectService.GetObject<IClassService>();
			Console.WriteLine(svr.HelloWorld());
			Console.ReadLine();
		}
	}
}

Last edited Nov 8, 2011 at 2:05 AM by R2, version 3

Comments

No comments yet.