在开发的时候,为客户端编写代码访问WCF的方式,我们应该比较熟悉,主要是添加一个代理,然后通过这个代理进行访问。

如果用浏览器访问WCF呢?(其实最终是想在JS里面访问)用浏览器访问、测试Web Service我们常常干, 而WCF整合了Web Service,Remoting,MSMQ,访问起来应当会更加方便吧?

一、代码配置

新建一个WCF服务,系统自动生成契约(即接口文件),代码文件(*.svc)。在契约文件里,要加上必要的特性

  1. [OperationContract]
  2. [WebGet(UriTemplate="/HelloWorld", RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json)]
  3. string HelloWorld();

SVC文件里,类也要加上相关特性:

  1. [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
  2. public class Attendance : IAttendance
  3. {
  4. public string HelloWorld()
  5. {
  6. return "Hello World!";
  7. }
  8. }

类这个特性,貌似也可以写到配置文件里。

二、配置文件配置

1)配置及原理

配置文件要添加一些节点。下面标注为“手动添加”的,即为需要添加的节点。其余则是系统默认提供。

  1. <system.serviceModel>
  2. <behaviors>
  3. <serviceBehaviors>
  4. <behavior>
  5. <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
  6. <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false"/>
  7. <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
  8. <serviceDebug includeExceptionDetailInFaults="false"/>
  9. </behavior>
  10. </serviceBehaviors>
  11. <!-- 我们手动添加 -->
  12. <endpointBehaviors>
  13. <behavior name="webBehavior">
  14. <webHttp />
  15. </behavior>
  16. </endpointBehaviors>
  17. </behaviors>
  18. <protocolMapping>
  19. <add binding="basicHttpsBinding" scheme="https" />
  20. </protocolMapping>
  21. <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  22. <!-- 我们手动添加 -->
  23. <services>
  24. <service name="WCF_Mobile.Attendance">
  25. <endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding"
  26. contract="WCF_Mobile.IAttendance" />
  27. </service>
  28. </services>
  29. </system.serviceModel>

这里面的节点含义,我目前并不十分了解。大概是:WCF本身提供服务(Services),外部通过接口,即endpoint(端点)来使用这些服务。然后服务、端点,都有一些约定进行描述,即behavior。

从上述配置文件可以看到,Service下面的endpoint,引用了<endpointBehaviors>的内容。

有关配置文件的一些知识,可以参考

我的WCF之旅(2):Endpoint Overview

http://www.cnblogs.com/artech/archive/2007/02/28/659331.html

WCF配置文件详解(一)

http://www.cnblogs.com/weichuo/archive/2008/07/09/1238979.html

2)跨域请求问题

不过,要注意,JS访问WCF,常常有跨域的问题。那么这时候要配置一下WCF的配置文件。详见拙作:

PhoneGap:JS跨域请求

http://blog.csdn.net/leftfist/article/details/38383049

三、用IIS承载WCF

首先要将WCF发布到一个指定文件夹,然后在IIS里配置此文件夹为网站。

这种发布跟普通asp.net网站发布没什么两样。习惯上,我喜欢发布为文件系统,每个文件一个DLL这种方式。

四、返回值类型用Stream

使用流作为返回值的好处,一是速度似乎比较快,二是如果服务返回string等其他类型,IE浏览器下,会有提问框出现,流就没有这个问题

  1. public Stream Delete()
  2. {
  3. return GetStream(@"{""data"":""OK!!!!!!""}");
  4. }
  5. /// <summary>
  6. /// 辅助方法,用于输出流
  7. /// </summary>
  8. /// <param name="str"></param>
  9. /// <returns></returns>
  10. private Stream GetStream(string str)
  11. {
  12. MemoryStream ms = new MemoryStream();
  13. StreamWriter sw = new StreamWriter(ms);
  14. sw.AutoFlush = true;
  15. sw.Write(str);
  16. ms.Position = 0;
  17. WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
  18. return ms;
  19. }

用浏览器访问WCF的更多相关文章

  1. Android访问WCF服务

    原文链接:http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 本章目的: 用Wcf建立可以上Android可以访问的数据服务, 数据 ...

  2. 浏览器访问Servlet

    浏览器访问Servlet1.指定一个Servlet路径(                     在web.xml :              <servlet>             ...

  3. 用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面

    现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览器中打开,关键是可以做成微信分享朋友圈的形式,大大提高游戏的传播,增强好友的游戏互动. 微信浏览器中打开网页游戏效果还不错,对 ...

  4. 解决使用IIS5.0配置的FTP服务器,客户端浏览器访问时无法获取目录列表的问题。

    我在windows xp sp3下利用iis构架了FTP服务器,允许且只允许匿名用户登陆.但刚开始配置好后,不管是使用命令行模式还是使用浏览器都发现无法访问. 于是怀疑防火墙屏蔽端口所致,果不其然,在 ...

  5. 客户端使用自定义代理类访问WCF服务 z

    通常在客户端访问WCF服务时,都需要添加服务引用,然后在客户端app.config或 web.config文件中产生WCF服务的客户端配置信息.若是每添加一个服务都是这样做,这样势必会将比较麻烦,能否 ...

  6. Windows Server 2003服务器.net4.0+IIS6.0的服务器,IE11浏览器访问的不兼容性

    工作中发生了一件诡异的事情: 程序在Win7+.NET4.0+IIS7.5的服务器部署,IE8和IE11请求时,响应的样式都正常. 但是在美的同事反映说,Windows Server 2003服务器. ...

  7. JBoss部署项目log4j配置会造成死锁问题,浏览器访问一直pending状态

    今天将项目部署到JBoss服务器上,部署成功后,浏览器访问页面一直在等待响应. 查了很长时间,最后在服务器上通过jstack pid命令查看Java堆栈信息,发现了有两个线程死锁. 看到造成死锁的原因 ...

  8. PHP判断访客是否移动端浏览器访问

    今天要给大家分享一段PHP代码,该代码的功能是用来判断访客是否移动端浏览器访问,该功能的实现思路是通过HTTP_X_WAP_PROFILE. HTTP_VIA.HTTP_USER_AGENT等信息来判 ...

  9. 浏览器访问php脚本通过sendmail用mail函数发送邮件

    前几天做项目遇到这样的一个问题:当某一个结点下有新的文章发表的时候,以邮件的形式通知该结点下的所有用户.这就需要用到邮件发送的功能. 因为项目是php语言做的,所以最简单的方法就是使用php自带的函数 ...

随机推荐

  1. js常用的事件对象

    事件源对象  event.srcElement.tagName  event.srcElement.type 捕获释放  event.srcElement.setCapture();   event. ...

  2. Android之属性动画(二)

    上一篇文章(链接:http://www.cnblogs.com/jerehedu/p/4458928.html  ),我们对属性动画有了简单的认识,并实际动手使用ObjectAnimator.Anim ...

  3. 转载|23个Python爬虫开源项目代码:爬取微信、淘宝、豆瓣、知乎、微博等

    地址:https://ask.julyedu.com/article/323

  4. (剑指Offer)面试题1:赋值运算符函数

    题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{public:    CMyString(char* pData=NULL);    CMy ...

  5. C#.NET常见问题(FAQ)-abstract抽象类如何理解

    例如有太多相似,但是不一样的类,他们都继承自同一个基类(比如大型游戏有各个种族,每个种族有各种人物,加起来几百种类型,然后基本上他们都是一个角色,都有基本相同的属性和方法,比如都会走,只是速度不同,都 ...

  6. Java从零开始学二十(集合简介)

    一.为什么需要集合框架 数组的长度是固定的,但是如果写程序时并不知道程序运行时会需要多少对象.或者需要更复杂的方式存储对象,---那么,可以使用JAVA集合框架,来解决这类问题 二.集合框架主要接口 ...

  7. ADS中编译现存项目时常见错误:无法打开文件\…\…\2440init.o的解决办法

    错误提示如下: 解决方法: 重新编译即可.

  8. ionic 项目中 使用 sass

    注: 1.先安装node-sass  -->> npm install --save node-sass --registry=https://registry.npm.taobao.or ...

  9. &quot;高可用方案工具包&quot; high availability toolkit 1.2 公布了。version 1.2 新增了 负载均衡 load balance 的技术实现

    "高可用方案工具包"  high availability toolkit 1.2 公布了. version 1.2 新增了 负载均衡 load balance 的技术实现. 项目 ...

  10. 〖Windows〗Linux的Qt程序源码转换至Windows平台运行,编码的解决

    在中国大陆,Windows默认的编码是gb2312,而Linux是UTF8: 多数情况下,把Linux上的程序转换至Windows上运行需要进行编码转换才能正常显示: 而其实大可以不必的,同样,文件使 ...