问题描述
如何将该“类”,用WCF发布出去,被SL使用???该类是来自“asp.net三层”的中的“BLL”层的,内容如下:usingSystem.Collections.Generic;usingSystem.Linq;usingMycems.DAL;usingMycems.Model;namespaceMycems.BLL{publicclassMonitoringManager{#region构造函数privatereadonlyMonitoringServiceservice;publicMonitoringManager():this(false){}publicMonitoringManager(boolissubstation){service=newMonitoringService(issubstation);service.IsIncludeWater=false;}publicMonitoringManager(boolissubstation,boolisincludewater){service=newMonitoringService(issubstation);service.IsIncludeWater=isincludewater;}#endregionpublicList<Monitoring>GetMonitorDatas(Monitoring.EnergyTypeenergytype,KeyValuePair<Monitoring.Period,string>monitordate,KeyValuePair<Monitoring.MonitorType,string>monitortype,stringmeterusetype){returnGetMonitorDatas(energytype,energytype.ToString(),monitordate,monitortype,meterusetype);}publicList<Monitoring>GetMonitorDatas(Monitoring.EnergyTypeenergytype,stringenergytypecode,KeyValuePair<Monitoring.Period,string>monitordate,KeyValuePair<Monitoring.MonitorType,string>monitortype,stringmeterusetype){varresult=newList<Monitoring>();vartotal=string.IsNullOrEmpty(meterusetype)||meterusetype.StartsWith(",")||meterusetype.StartsWith("*");service.IsAutoStatistics=energytype!=Monitoring.EnergyType.OTHER;service.IsManualStatistics=total&&(monitordate.Key==Monitoring.Period.Y||monitordate.Key==Monitoring.Period.X)&&monitortype.Key!=Monitoring.MonitorType.D;if(total){result=service.GetMonitorDetailDatas(energytype,energytypecode,monitordate,monitortype,string.Empty);if(!string.IsNullOrEmpty(meterusetype))meterusetype=meterusetype.Substring(1);if(!string.IsNullOrEmpty(meterusetype)&&meterusetype.StartsWith(","))meterusetype=meterusetype.Substring(1);}if(!string.IsNullOrEmpty(meterusetype)&&!meterusetype.StartsWith(",")){if(service.IsAutoStatistics&&!service.IsSubstation)result.AddRange(service.GetMonitorDetailDatas(energytype,energytypecode,monitordate,monitortype,meterusetype));}#region多日期时的处理vardates=monitordate.Value.Split(',');if(dates.Length>1&&(monitortype.Value!="*")){varnewresult=newList<Monitoring>();foreach(vardateindates){varitemofdate=result.Where(item=>item.SN==date).FirstOrDefault();if(itemofdate==null){switch(monitordate.Key){caseMonitoring.Period.Y:itemofdate=newMonitoringYear();break;caseMonitoring.Period.M:itemofdate=newMonitoringMonth();break;default:itemofdate=newMonitoringDay();break;}itemofdate.SN=date;itemofdate.U=result[0].U;itemofdate.V=result[0].V;itemofdate.E=result[0].E;itemofdate.EN=result[0].EN;itemofdate.R=result[0].R;itemofdate.RN=result[0].RN;itemofdate.F=result[0].F;itemofdate.FN=result[0].FN;itemofdate.B=result[0].B;itemofdate.BN=result[0].BN;itemofdate.C=result[0].C;itemofdate.CN=result[0].CN;itemofdate.D=result[0].D;itemofdate.DN=result[0].DN;itemofdate.Type=result[0].Type;itemofdate.Date=result[0].Date;itemofdate.Target=result[0].Target;itemofdate.UseType=result[0].UseType;result.Add(itemofdate);}newresult.Add(itemofdate);}returnnewresult;}#endregionreturnresult;}publicDictionary<string,double[]>GetAreaHeadCount(){returnservice.GetAreaHeadCount();}#endregion}#region扩展方法publicstaticclassListMonitorExtention{publicstaticList<Monitoring>Sum(thisList<Monitoring>source,List<Monitoring>another){foreach(varSinsource){varitem=(MonitoringYear)S;foreach(varAinanother){if(S.SN==A.SN&&S.E==A.E&&S.R==A.R&&S.F==A.F&&S.B==A.B&&S.C==A.C&&S.D==A.D){item.M01+=A.Datas[0];item.M02+=A.Datas[1];item.M03+=A.Datas[2];item.M04+=A.Datas[3];item.M05+=A.Datas[4];item.M06+=A.Datas[5];item.M07+=A.Datas[6];item.M08+=A.Datas[7];item.M09+=A.Datas[8];item.M10+=A.Datas[9];item.M11+=A.Datas[10];item.M12+=A.Datas[11];if(string.IsNullOrEmpty(item.SN))item.SN=A.SN;another.Remove(A);break;}}}source.AddRange(another);returnsource;}}#endregion}问题:如何将该“类”,和该类中的“所有方法”用“WCF”发布出去,可以在客户端被“SL”使用,进行查询???
解决方案
解决方案二:
该回复于2012-03-07 09:21:53被版主删除
解决方案三:
使用的是“启用了Silverlight的WCF服务”,内容如下:usingSystem;usingSystem.Linq;usingSystem.Runtime.Serialization;usingSystem.ServiceModel;usingSystem.ServiceModel.Activation;[ServiceContract(Namespace="")][SilverlightFaultBehavior][AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]publicclassChartsService{[OperationContract]publicvoidDoWork(){//在此处添加操作实现return;}//在此处添加更多操作并使用[OperationContract]标记它们}是不是把“BLL层”下的“MonitoringManager”类引用过来,添加上这些方法就可以了呢?
解决方案四:
把类改成了这个样子,使用了“RIAWCFService”,但是好像不能标记构造函数。[ServiceContract(Namespace="")][SilverlightFaultBehavior][AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]publicclassChartsService{[OperationContract]publicvoidDoWork(){return;}//在此处添加更多操作并使用[OperationContract]标记它们#region构造函数privatereadonlyMonitoringServiceservice;[OperationContract]publicChartsService():this(false){}[OperationContract]publicChartsService(boolissubstation){service=newMonitoringService(issubstation);service.IsIncludeWater=false;}[OperationContract]publicChartsService(boolissubstation,boolisincludewater){service=newMonitoringService(issubstation);service.IsIncludeWater=isincludewater;}问题:“[OperationContract]”标记好像对构造函数无效,那么“构造函数”应该怎样对外发布呢?错误信息如下:错误1特性“OperationContract”对此声明类型无效。它只对“method”声明有效。C:UsersAdministratorDesktopGLLG(Preview2.0)Mycems.UIApp_CodeChartsService.cs3010C:...Mycems.UI#endregion[OperationContract]publicList<Monitoring>GetMonitorDatas(Monitoring.EnergyTypeenergytype,KeyValuePair<Monitoring.Period,string>monitordate,KeyValuePair<Monitoring.MonitorType,string>monitortype,stringmeterusetype){returnGetMonitorDatas(energytype,energytype.ToString(),monitordate,monitortype,meterusetype);}
解决方案五:
比如你建了个网站,先添加wcf服务,然后在服务里面定义你要传递过去的类(datacontract的属性),类里面写你的字段方法(加相应的属性)。为你的网站添加silverlightproject,然后添加你刚弄的服务引用,就可以直接使用那个类了。(ps:为避免代码重复,可以用link)
解决方案六:
引用4楼hbu_pig的回复:
比如你建了个网站,先添加wcf服务,然后在服务里面定义你要传递过去的类(datacontract的属性),类里面写你的字段方法(加相应的属性)。为你的网站添加silverlightproject,然后添加你刚弄的服务引用,就可以直接使用那个类了。(ps:为避免代码重复,可以用link)
"WCF服务"没有办法公布“服务类的构造函数”吗?
解决方案七:
该回复于2012-03-08 08:57:33被版主删除
解决方案八:
该回复于2012-03-09 09:00:24被版主删除
解决方案九:
该回复于2012-03-11 07:52:30被版主删除
解决方案十:
引用5楼starryria的回复:
"WCF服务"没有办法公布“服务类的构造函数”吗?
wcf(以及webservice)客户端代码就是针对服务的那几个rpc调用,跟服务器端有什么类型没有关系。比如说服务器端是一个vb6编译出来的exe,或者是一个javascript写的脚本,只要它可以处理http格式字符串请求并且返回http格式的字符串结果,对客户端也是一样的。客户端就不要纠结服务器端的代码是怎么写的,只要面对服务接口来操作就行了。
解决方案十一:
引用9楼sp1234的回复:
引用5楼starryria的回复:"WCF服务"没有办法公布“服务类的构造函数”吗?wcf(以及webservice)客户端代码就是针对服务的那几个rpc调用,跟服务器端有什么类型没有关系。比如说服务器端是一个vb6编译出来的exe,或者是一个javascript写的脚本,只要它可以处理http格式字符串请求并且返回http格式的字符串结果,对客户端也是一样的。……
能追加一点问题么?“WebService”是不是泛指,它包含“WCF”和“asmx文件”???
解决方案十二:
顶一下啊。。。
解决方案十三:
引用10楼starrywcf的回复:
能追加一点问题么?“WebService”是不是泛指,它包含“WCF”和“asmx文件”???
这种问题就不要麻烦大牛了,我可以代为回答吗?WebService是一项服务接口技术,WCF和ASP.Net里面的.asmx都可以实现WebService。
解决方案十四:
引用5楼starryria的回复:
"WCF服务"没有办法公布“服务类的构造函数”吗?
WCF服务公布出来的是契约:DataContract、OperatingContract