本文将建立一个silverlight与wcf通讯的简单实例,wcf服务将被独立出来,而不再寄放在Web中。以下是详细步骤:


  新建Silverlight应用程序,名称WCFtest,在解决方案上右键添加wcf服务应用程序,名称WcfServiceTest,WCF服务将不再寄宿在Web中。


  WcfServiceTest创建完毕,将VS自动添加的IService1.cs和Service1.svc文件删除。


  修改WcfServiceTest服务,固定端口12345。


  添加一个wcf服务,名称ServiceTest,VS自动生成IServiceTest.cs和ServiceTest.svc文件。


  打开IServiceTest.cs,新建一个实体类MyName,包含FirstName和LastName两个属性,[DataContract]标识实体类契约,[DataMember]标识属性,实体类MyName用以返回。

    [ServiceContract]//接口标识,服务契约    public interface IServiceTest    {        [OperationContract]void DoWork();

        [OperationContract]//方法名标识        MyName GetName(string fullName);    }

    [DataContract]//实体类契约    public class MyName    {        [DataMember]//属性        public string FirstName        {get;set;        }

        [DataMember]public string LastName        {get;set;        }    }


  实现接口方法,传入参数fullName,将fullName拆解成FirstName和LastName赋值给新建MyName实体类的属性,返回MyName类型的结果。

    public class ServiceTest : IServiceTest    {public void DoWork()        {        }

#region IServiceTest 成员

public MyName GetName(string fullName)        {            MyName name = new MyName();string[] names = fullName.Split(' ');            name.FirstName = names[0];            name.LastName = fullName.Substring(names[0].Length - 1);return name;        }

#endregion    }


  重新生成解决方案,否则可能会出现发现WCF服务有误的情况,在Silverlight项目中添加服务引用,点击发现可以查找到刚刚添加的svc服务。修改服务命名空间ServiceReferenceTest。


  在Silverlight项目的MainPage.xaml上,为了便于演示,添加一个TextBox,一个Button,一个TextBlock。

    <Grid x:Name="LayoutRoot" Background="White">        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,41,0,0" Name="button1" VerticalAlignment="Top" Width="75" />        <TextBlock Height="23" HorizontalAlignment="Left" Margin="12,70,0,0" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top" Width="120" />    </Grid>


  添加button1点击Click事件。

        private void button1_Click(object sender, RoutedEventArgs e)        {            Binding binding = new BasicHttpBinding();            EndpointAddress endPoint = new EndpointAddress("http://localhost:12345/ServiceTest.svc");            ServiceReferenceTest.ServiceTestClient client = new ServiceReferenceTest.ServiceTestClient(binding, endPoint);            client.GetNameCompleted += new EventHandler<ServiceReferenceTest.GetNameCompletedEventArgs>(client_GetNameCompleted);            client.GetNameAsync(this.textBox1.Text);        }

Binding binding =new BasicHttpBinding();绑定通讯方式,这里是BasicHttp方式;

EndpointAddress endPoint = new EndpointAddress("http://localhost:12345/ServiceTest.svc");指定svc服务路径;

定义调用GetName方法完成后的回调事件,客户端接收MyName类型的返回结果e.Result,将FirstName属性显示在textBlock1上;

        void client_GetNameCompleted(object sender, ServiceReferenceTest.GetNameCompletedEventArgs e)        {            ServiceReferenceTest.MyName name = e.Result;try            {this.textBlock1.Text = string.Format("FirstName:{0}", name.FirstName);            }catch            {this.textBlock1.Text = "返回null!";            }        }

异步调用GetName方法,将textBox1的text内容作为参数调用服务端的GetName方法。


  你可能会遇到跨域问题,解决方法是,在wcf服务应用程序中添加配置文件clientaccesspolicy.xml。

clientaccesspolicy.xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?><access-policy>  <cross-domain-access>    <policy>      <allow-from http-request-headers="*">        <domain uri="*"/>      </allow-from>      <grant-to>        <resource path="/" include-subpaths="true"/>      </grant-to>    </policy>  </cross-domain-access></access-policy>


  F5运行,在TextBox1中输入全名fullName,点击button1,调用服务端的GetName方法参数fullName,GetName方法返回一个MyName类型的结果,客户端将结果中的FirstName属性显示在TextBlock1中。


WCF学习笔记目录

转载于:https://www.cnblogs.com/xwlyun/archive/2012/01/09/2316911.html

WCF学习笔记(2)——独立WCF服务相关推荐

  1. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  2. Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1

    Sharepoin学习笔记-架构系列-Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1 Sharepoint服务是Sha ...

  3. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  4. PhalAPI学习笔记 ——— 第二章接口服务请求

    PhalAPI学习笔记 --- 第二章接口服务请求 前言 接口服务请求 接口服务请求案例 自定义接口路由 开启匹配路由 配置路由规则 nginx apache 服务请求 结束语 前言 公司业务需要转学 ...

  5. Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)

    Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...

  6. 学习笔记:搭建sftp服务

    学习笔记:搭建sftp服务 前言 环境 操作系统 主要软件 步骤 下载软件 安装软件 配置软件 重启服务 测试 总结 问题 前言 本文事无巨细的记录了搭建和测试的完整过程,叙述较为冗余,为了提高阅读效 ...

  7. Spring.NET学习笔记22——整合WCF(应用篇) Level 200

    Spring.NET对WCF(Windows Communication Foundation)有很好的支持,Spring.Services程序集下封装了创建和调用WCF的方法.以往,我们使用svc文 ...

  8. 学习笔记:SpringCloud 微服务技术栈_实用篇②_黑马旅游案例

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  9. Java微服务学习笔记(一):微服务架构的概念理解

    Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...

最新文章

  1. python培训学费多少钱-培训python学费多少python学会得多少钱?
  2. 数学建模学习笔记——预测模型
  3. 让事件飞——Linux eventfd 原理
  4. 基于FPGA实现ADC7768数据采集系统设计(8路)
  5. hadoop+海量数据面试题汇总(一)
  6. html form-inline,如何將HTML
  7. 归并排序的java代码_归并排序的原理及java代码实现
  8. 计算机组成原理完整学习笔记(六):指令系统
  9. 数据挖掘概念与技术(第三版)课后答案——第三章
  10. Hibernate框架搭建
  11. 高数_第6章无穷级数_函数的幂级数展开式_马克劳林级数
  12. 机器视觉运动控制一体机应用|工件同心度检测
  13. java 度分秒转换为度_andriod Java中度转度分秒
  14. 编辑邮件时去掉回车光标跟随
  15. 重装战姬服务器维护,《重装战姬》10月29日更新维护公告
  16. 解决电脑插耳机声音外放
  17. Kotlin学习安卓篇(一)为什么要学习Kotlin?
  18. GMap.NET入门详细教程【2】-------- 初始化并加载一张地图
  19. 十诫诗串词_持续交付的十诫
  20. 小程序服务器域名和业务域名的总结和配置

热门文章

  1. TensorFlow官方教程翻译:导入数据
  2. php setjmp longjmp,我本来以为setjmp和longjmp的实现很复杂【附代码】
  3. python paramiko远程执行命令打开窗口_使用Paramiko在远程机器上通过sshClient()执行本地python脚本...
  4. Pinyin4j 的使用 Pinyin4jUtils工具类
  5. php 保护连接字符串,PHP OOP更新扩展类__construct上的受保护字符串
  6. macOS 使用手册
  7. qweb加html文件,将本地html文件加载到Pyside QwebVi中
  8. cpout引脚是干什么的_FPGA中差分信号的定义和使用(一)
  9. 【单片机实验】矩阵键盘
  10. 【Flask】Flask常用信号