技术开发 频道

NBearV3 Step by Step教程——IoC进阶

    Step 3 从实体设计代码生成实体代码、实体配置文件

    3.1 至此,所有的实体的设计就修改就完毕了。编译EntityDesigns工程。

    3.2 运行dist目录中的NBear.Tools.EntityDesignToEntity.exe工具,载入EntityDesigns工程编译生成的EntityDesigns.dll。

    3.3 点击Generate Entities按钮,将生成的代码保存到Entities工程中的一个名叫Entities.cs的代码文件。

    3.4 点击Generate Configuration按钮,将生成的代码保存到website工程下的名为EntityConfig.xml的文件中。

    Step 4 使用ServiceMQServer.exe和ServiceHost.exe,部署程序为分布式系统

    4.1 在将测试程序部署为分布式系统之前,我们先验证一下程序运行正常。将website设为启动工程,并设置Default.aspx为启动页。运行website,看看,Default.aspx是否正常显示了和IoC_Tutorial中完全相同的运行结果。

    4.2 为了更方便测试,我们在IoC_Adv_Tutorial目录中建一个Bin目录,Bin目录中建立ServiceMQServer目录和ServiceHost目录。新建如下的脚本文UpdateAssemblies.bat,用来更新所有需要的dll和exe到两个目录下:

@echo off copy ..\website\EntityConfig.xml .\ServiceHost\ /Y copy ..\Entities\bin\Debug\*.* .\ServiceHost\ /Y copy ..\ServiceImpls\bin\Debug\*.* .\ServiceHost\ /Y copy ..\ServiceInterfaces\bin\Debug\*.* .\ServiceHost\ /Y copy ..\..\..\dist\NBear.IoC.Servers.ServiceMQServer.exe .\ServiceMQServer\ /Y copy ..\..\..\dist\NBear.Common.dll .\ServiceMQServer\ /Y copy ..\..\..\dist\NBear.IoC.dll .\ServiceMQServer\ /Y copy ..\..\..\dist\NBear.Net.dll .\ServiceMQServer\ /Y copy ..\..\..\dist\NBear.IoC.Hosts.ServiceHost.exe .\ServiceHost\ /Y

    4.3 执行4.2所见的脚本,复制相关程序集到这两个目录。

    4.4 在ServiceMQServer目录中,我们看到,除了NBear.*.dll之外,只有一个文件NBear.IoC.Servers.ServiceMQServer.exe。这个文件是NBear提供的,从dist目录复制过来的。我们需要为它创建如下的NBear.IoC.Servers.ServiceMQServer.exe.config文件:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="serviceFactory" type="NBear.IoC.Service.Configuration.ServiceFactoryConfigurationSection, NBear.IoC" /> </configSections> <serviceFactory type="Remoting" name="testServiceFactory" protocol="HTTP" server="127.0.0.1" port="8888" debug="true" maxTry="30" /> </configuration>

    以上的配置,指定了允许连接到该Server的ServiceFactory的配置信息。其中参数含义分别为:

    · type - ServiceFactory的类型是Remoting,默认情况下,ServiceFactory的类型总是Local的,所以不能连接远程ServiceMQServer。
    · name – 用于连接ServiceMQServer的唯一名称,该名称不能包含空格。
    · protocol - ServiceFactory连接ServiceMQServer的协议,可选值为HTTP或TCP。
    · server和port – ServiceMQServer监听的服务器地址和端口。
    · debug - 是否在ServiceMQServer中显示调试日置信息。
    · maxTry - 对于同一个消息的等待读取的最大次数。

    4.5 我们再切换到ServiceHost目录。该目录下包含了用于部署Service的程序集。我们可以看到,有ServiceInterfaces.dll,ServiceImpls.dll,Entities.dll,相关的NBear和Castke程序集,和NBear.IoC.Hosts.ServiceHost.exe。最后这个程序也是有NBear提供,从dist复制过来的。我们需要为它创建如下的NBear.IoC.Hosts.ServiceHost.exe.config文件:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor" /> <section name="serviceFactory" type="NBear.IoC.Service.Configuration.ServiceFactoryConfigurationSection, NBear.IoC" /> <section name="entityConfig" type="NBear.Common.EntityConfigurationSection, NBear.Common"/> </configSections> <entityConfig> <includes> <add key="Sample Entity Config" value="~/EntityConfig.xml"/> </includes> </entityConfig> <castle> <components> <!--You can use standard castle component decleration schema to define service interface impls here--> <component id="category service" service="ServiceInterfaces.ICategoryService, ServiceInterfaces" type="ServiceImpls.CategoryService, ServiceImpls"/> <component id="product service" service="ServiceInterfaces.IProductService, ServiceInterfaces" type="ServiceImpls.ProductService, ServiceImpls"/> </components> </castle> <serviceFactory type="Remoting" name="testServiceFactory" protocol="HTTP" server="127.0.0.1" port="8888" debug="true" maxTry="30" /> <connectionStrings> <add name="Northwind" connectionString="Server=(local);Database=Northwind;Uid=sa;Pwd=sa" providerName="NBear.Data.SqlServer.SqlDbProvider"/> </connectionStrings> </configuration>

    我们可以注意到,配置文件中除了包含对ServiceFactory的配置,参数的含义和4.4中的config含义完全一样。另外,这里也包含了我们从IoC_Tutorial中复制过来的website中的Web.config中类似的entityConfig、ConnectionString和castke配置节。之所以要配置这些信息,是因为,我们的ServiceHost将作为Service的宿主,接受对他支持的service的访问请求,要读取实体信息,也需要访问数据库。    

0
相关文章