今天闲着无事,给大家分享一下我的一个项目中WCF的使用。我这项目使用的是Silverlight,至于其他类型的使用方法也是一样的。

1.建立一个Silverlight带Web项目的解决方案。

2.在web项目中创建Wcf服务文件.如文件创建在web项目下Services文件夹中,名为HomeService.svc。

3.在客服端引用wcf服务。

4.在应用程序中获取Wcf服务。

 string WCFServiceUri = "Services/HomeService.svc"; //WCF服务 相对路径

 HomeService.HomeServiceClient hs = (HomeService.HomeServiceClient)CreateWebServiceObject(typeof(HomeService.HomeServiceClient), WCFServiceUri);
hs.UserLoginCompleted += new EventHandler<HomeService.UserLoginCompletedEventArgs>(hs_UserLoginCompleted);
hs.UserLoginAsync(this.txtLoginID.Text, this.pwbLoginPaw.Password); private void hs_UserLoginCompleted(object sender, HomeService.UserLoginCompletedEventArgs e)
{
//code
} /// <summary>
/// 指定最大接收信息的大小
/// </summary>
public static long dMaxReceivedMessageSize = ; /// <summary>
/// 指定最大缓冲区的大小
/// </summary>
public static int dMaxBufferSize = ; /// <summary>
/// <para>1.type 你需要创建服务的类型。例如:typeof(WcfClass) </para>
/// <para>2.webServiceName 服务路径/ServiceHost</para>
/// </summary>
public static object CreateWebServiceObject(Type type, string webServiceName)
{
BasicHttpBinding basicBinding = new BasicHttpBinding();
basicBinding.MaxReceivedMessageSize = dMaxReceivedMessageSize;
basicBinding.MaxBufferSize = dMaxBufferSize;
basicBinding.SendTimeout = TimeSpan.FromMinutes();
CustomBinding binding = new CustomBinding(basicBinding); EndpointAddress endPoint = new EndpointAddress(GetServicesUri(webServiceName,)); return Activator.CreateInstance(type, binding, endPoint);
} /// <summary>
/// 获取路径
/// </summary>
/// <param name="sUri"></param>
/// <param name="type">1.路径到ClientBin下.2.根目录.3.当前页面路径</param>
/// <returns></returns>
public static string GetServicesUri(string sUri, int type)
{
var applicationUri = Application.Current.Host.Source;
string uri = string.Empty;
switch (type)
{
case :
uri = new Uri(Application.Current.Host.Source, string.Format("{0}", sUri)).AbsoluteUri; //ClientBin
break;
case :
uri = new Uri(Application.Current.Host.Source, string.Format("../{0}", sUri)).AbsoluteUri; //localhost
break;
case :
uri = new Uri(System.Windows.Browser.HtmlPage.Document.DocumentUri, sUri).ToString();
break;
default:
uri = sUri;
break;
} return uri;
}

这样便可以访问到web端的Wcf服务。

注意:在实例化BasicHttpBinding对象时,BasicHttpBinding的MaxBufferSize和MaxReceivedMessageSize最好设置成一样大小,本人测试了MaxReceivedMessageSize小于MaxBufferSize的情况,貌似是不可以的。

在一些实际的项目中,如果项目安全要求比较高的话,本人建议将服务端处理文件封装在DAL中,通过服务地址跳转的方式访问。

 

个人项目中的WCF使用的更多相关文章

  1. 项目中使用WCF替换asmx Web service总结

    以前项目解决方案中,用http协议的asmx Web service作服务器数据访问入口,在SoapHeader中写入用户名和加盐密码进行身份认证. http asmx服务是明文传输,传输过程中数据很 ...

  2. 赵本山 教你如何在实战项目中使用WCF

    我们都知道调用WCF直接在Service References中引用可以远程调用的WCF Url就行了. 但是我们想过没,在Development环境中可以这样做,但是QA.UAT.Productio ...

  3. 教你如何在实战项目中使用WCF

    我们都知道调用WCF直接在Service References中引用可以远程调用的WCF Url就行了. 但是我们想过没,在Development环境中可以这样做,但是QA.UAT.Productio ...

  4. Visual Studio2012中搭建WCF项目

    分布式系统:指在系统与系统之间进行通信,系统不再是孤立的,例如:淘宝查看物流信息,或是hao123的天气预报,这些可能都是用的别的系统的web方法. 1.创建空的解决方案 2.新建项目-WCF服务库项 ...

  5. WCF项目中出现“目标程序集不包含服务类型”的解决办法

    如果创建新项目时(以下简称A项目)选择的是WCF相关的项目模板,并且在A项目中只定义接口而不实现接口,那么任何引用了A项目的项目,在调试时都会弹出警告框“目标程序集不包含服务类型.可能需要调整此程序集 ...

  6. 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入

    在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...

  7. 创建寄宿在Windows服务中的WCF服务

    1.创建Windows服务项目 2.Server1改名为你想要的名称,比如WinServer 3.在项目中新建一个WCF文件夹,用于存放wcf服务文件. 注:在WcfServer类的上面还要添加 [S ...

  8. SharePoint 2013 中自定义WCF服务

    在使用SharePoint2013的时候,如果其他客户端 API 的组合不足,可以通过自定义 Web 服务扩展 SharePoint.默认情况下,SharePoint 2013 不仅支持创建自定义 A ...

  9. 采用EntLib5.0(Unity+Interception+Caching)实现项目中可用的Caching机制

    看了园子里很多介绍Caching的文章,多数都只介绍基本机制,对于Cache更新和依赖部分,更是只简单的实现ICacheItemRefreshAction接口,这在实际项目中是远远不够的.实际项目中, ...

随机推荐

  1. Java 并发 线程属性

    Java 并发 线程属性 @author ixenos 线程优先级 1.每当线程调度器有机会选择新线程时,首先选择具有较高优先级的线程 2.默认情况下,一个线程继承它的父线程的优先级 当在一个运行的线 ...

  2. 在iOS9中 xcode7 网络请求 如图片请求不显示等

    Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is inse ...

  3. 织梦dedecms文章发布日期时间调用标签大全

    dedecms首页时间标签: 1.12-27 样式 [field:pubdate function='strftime("%m-%d",@me)'/] 2.May 15, 2012 ...

  4. JPA 系列教程 异常 集锦

    异常1.hibernate升级到3.5版本 异常信息摘要: Associations marked as mappedBy must not define database mappings like ...

  5. pre标签

    $(" .pop-info").html("<PRE>"+data.info+"<PRE>"): 数据库里的换行存的 ...

  6. LogFactory缺包异常

    抛出异常: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/loggin ...

  7. fiddler抓包使用①

    链接:http://jingyan.baidu.com/article/3a2f7c2e0d5f2126aed61175.html   设置好代理后,有的设备需要访问"192.168.1.1 ...

  8. 第四节,Linux基础命令

    第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令         ...

  9. String对象的Replace()

    <!DOCTYPE html> <html> <head> </head> <body> <script type="tex ...

  10. 关于ApkTool不同版本在重新打游戏包时候的区别

    在工作中由于使用到将游戏CP提供的apk包重新反编译,然后二次签名出包,所以遇到了一个奇怪的bug. 下面是CP提供的apk包,将近358M 但是在重新编译之后,包变成了250M左右的apk包,虽然可 ...