美文网首页
WCF 中使用Unity.WCF

WCF 中使用Unity.WCF

作者: SMILE_NO_09 | 来源:发表于2018-07-18 15:12 被阅读106次

    近期有个项目,使用的是WCF+Silverlight,所以自己先学习WCF基础,这里做一个简单的记录。

    解决方案

    搭建的基本系统框架如截图,Data部分是用的EF链接数据库,domain本来想使用域服务类,因为他会根据ORM产生的表生成增删改查功能,后来还是改为WCF,下面的两个是是使用了Telerik Silverlight搭建的页面,只包含简单的菜单和一个查询显示到GridView的操作,后面补一个争对telerik:RadGridView的学习篇。

    项目结构

    WCF中引入Unity.WCF

    首先在Survery.Domain中添加一个名为SurveryService的WCF,会自动生成两个文件:ISurveryService.cs 和SurveryService.cs, 协议部分: [ServiceContract],[OperationContract]等都在ISurveryService.cs中,SurveryService.cs 中直接实现Interface即可。我们在WCF 中添加一个简单的查询方法:

    public IEnumerable<TSurvery> GetSurveryList()
            {
                SurveryDbEntities surveryDb = new SurveryDbEntities();
                try
                {
                    return surveryDb.T_Survey.ToList().Select(s => new TSurvery()
                    {
                        AcquittanceId = s.AcquittanceId,
                        BackName = s.BackName,
                        BankAccount = s.BankAccount,
                        Company = s.Company,
                        CreateTime = Convert.ToDateTime(s.CreateTime).ToString("yyyy-MM-dd"),
                        Email = s.Email,
                        PhoneNo = s.PhoneNo,
                        TaxId = s.TaxId,
                        UserName = s.UserName,
                        id = s.id
                    });
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    

    TSurvery是业务需要自己添加的实体类,不做多解。
    然后使用Nuget添加Unity.WCF。Unity.WCF其实也是继承Unity,针对WCF简化了使用方法,已经实现了ServiceHostFactory。其实也是需要RegisterType和Resolve。

    添加Unity.wcf
    具体使用方法:新增一个类命名为WcfServiceFactory,然后继承UnityServiceHostFactory,这时候需要去重写一个方法ConfigureContainer即可。具体代码如下:
        public class WcfServiceFactory:UnityServiceHostFactory
        {
            protected override void ConfigureContainer(Unity.IUnityContainer container)
            {
                container.RegisterType<ISurveryService, SurveryService>();
            }
        }
    

    服务寄宿

    在完成以上工作后,需要对服务进行寄宿,我们是寄宿在项目“tkSurveryApp.Web”中,参考微软文档:Hosting the Data Service,以往在ASP.NET中直接添加WCF,会生成一个.svc文件,在<%@ ServiceHost %> 中会有CodeBehind属性,绑定的是WCF代码的文件。但是我们项目使用的WCF是在另一个类中,并且使用了依赖注入,所以我们要使用另一个属性Factory,Factory是用于创建寄宿服务的ServiceHost 的ServiceHostFactory。我们会指定到WcfServiceFactory上。修改Service指向寄宿服务的类型。具体代码如下:

    <%@ ServiceHost Language="C#" Debug="true" Service="Survery.Domain.SurveryService" Factory="Survery.Domain.WcfServiceFactory" %>
    

    Silverlight中使用WCF

    在Silverlight中添加WCF时遇到一个坑,当时很久都没解决,这个坑的截图如下


    无法解析服务

    提示无法导入,网上查找方法,最终解决方法是去掉图中那个勾,


    去掉“重新使用引用的程序集中的类型”勾选
    最后客户端调用代码:
            private void RadButton_Click(object sender, RoutedEventArgs e)
            {
                SurveryServiceClient client = new SurveryServiceClient();
                client.GetSurveryListAsync();
                client.GetSurveryListCompleted += client_GetSurveryListCompleted;
            }
            private void client_GetSurveryListCompleted(object sender, GetSurveryListCompletedEventArgs e)
            {
                rdData.ItemsSource = e.Result;
            }
    

    网页运行结果


    Silverlight 页面

    相关文章

      网友评论

          本文标题:WCF 中使用Unity.WCF

          本文链接:https://www.haomeiwen.com/subject/tguopftx.html