注册 登录
编程论坛 C# 论坛

WCF 企业应用实践 (一)

wangnannan 发布于 2011-09-28 09:21, 1781 次点击
最近公司有个项目 应用到WCF 主要是项目之间数据的传输 项目内的数据传输 就不细说了 相比较Webservice 个人感觉wcf 封装了webservice也加入了很多强大的功能 那开始第一步吧
1 首先在要接受数据的项目中 添加wcf服务 这里拿silverlight来说  通常会在项目中建立一个service文件夹 里面用于存放webervice服务和wcf服务
wcf文件的扩展名为.svc
只有本站会员才能查看附件,请 登录

2 然后在建立好的wcf服务内实现您要操作的代码
生成的主要代码如下

程序代码:
using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
namespace WebProject.Service
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1
    {
        [OperationContract]
        public void DoWork()
        {
            // 在此处添加操作实现
            return;
        }
        // 在此处添加更多操作并使用 [OperationContract] 标记它们
    }
}
在这里我们可以添加自己的方法 OperationContract代表 契约 除了这种契约还有服务契约(ServiceContract),操作契约(OperationContract),数据契约(DataContract),服务已知类型(ServiceKnownType),数据成员(DataMember)。 大家可以把契约理解为通信接口。如果想验证写的wcf服务是否正确 可以右键在浏览器中查看如下
只有本站会员才能查看附件,请 登录

3 实现好之后我们就准备调用了 首先运行宿主程序也就是含有wcf服务的程序 然后在另一个程序引用添加宿主程序中的wcf服务



[ 本帖最后由 wangnannan 于 2011-9-28 09:23 编辑 ]
6 回复
#2
wangnannan2011-09-28 09:25
只有本站会员才能查看附件,请 登录
#3
wangnannan2011-09-28 09:29
右键添加引用 选择添加服务引用 找到wcf宿主项目的地址 点击前往就可以看到我们写的我wcf服务及方法了 点击确定 就可以引用宿主项目的wcf服务了 现在我们看看如何调用宿主wcf服务的内容 主要代码如下
       /*启用了silverlight的wcf服务*/
            client = new ServiceReference1.MenuActDtlClient(CommandWcf.SetBinding(), CommandWcf.SetEndpointAddress(http://192.168.18.99/groupmanage/Service/MenuActDtl.svc));//宿主wcf服务地址
            client.getDataAsync();//wcf服务内方法
            client.getDataCompleted += new EventHandler<ServiceReference1.getDataCompletedEventArgs>(clent_getDataCompleted);

这里要注意一下 wcf返回的数据是异步的

[ 本帖最后由 wangnannan 于 2011-9-28 09:35 编辑 ]
#4
wangnannan2011-09-28 09:32
还有其它的方法 也很类似 比方说webservice WcfRiaService这里个人比较倾向于WcfRiaService 更加灵活
现贴出代码仅供参考
程序代码:
//WCFRIAService  
ServiceReference3.UserManageDSSoapClient c = new ServiceReference3.UserManageDSSoapClient();
            System.ServiceModel.Channels.Binding b = new System.ServiceModel.BasicHttpBinding();
            System.Uri u = new Uri("http://192.168.18.99/groupmanage/ClientBin/Ecreate-RiaService-Web-Service-UserManageDS.svc/Soap");
            System.ServiceModel.EndpointAddress e = new System.ServiceModel.EndpointAddress(u);
            ServiceReference3.UserManageDSSoapClient d = new ServiceReference3.UserManageDSSoapClient(b, e);
         
            d.GetIC_MenuActDtlAsync();
            d.GetIC_MenuActDtlCompleted += new EventHandler<ServiceReference3.GetIC_MenuActDtlCompletedEventArgs>(c_GetIC_MenuActDtlCompleted);

 
#5
wangnannan2011-09-28 09:32
程序代码:
  /*webservice调用*/
            BasicHttpBinding basicBinding = new BasicHttpBinding();
            CustomBinding binding = new CustomBinding(basicBinding);
            BindingElement binaryElement = new BinaryMessageEncodingBindingElement();
            EndpointAddress endPoint = new EndpointAddress("http://192.168.18.99/groupmanage/Service/ServiceMenuActDtl.asmx");
            ServiceReference2.ServiceMenuActDtlSoapClient serviceClient = (ServiceMenuActDtlSoapClient)Activator.CreateInstance(typeof(ServiceMenuActDtlSoapClient), binding, endPoint);
            serviceClient.HelloWorldAsync();
            serviceClient.HelloWorldCompleted += new EventHandler<HelloWorldCompletedEventArgs>(serviceClient_HelloWorldCompleted);


[ 本帖最后由 wangnannan 于 2011-9-28 09:35 编辑 ]
#6
wangnannan2011-09-28 09:36
上班时间 有时间在和大家分享吧
#7
有容就大2014-02-18 12:58
w版 辛苦了
1