WCF多种调用方式兼容
1、能被ajax get
2、能post
3、wcf正常调用
实现:
- [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
- [JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")]
- public class WCFJsonTest : IWCFJsonTest
- {
- public List<TestModel> GetTest(string id)
- {
- List<TestModel> list = new List<TestModel>();
- TestModel t = new TestModel();
- t.Ids = ;
- t.Names = id;
- list.Add(t);
- TestModel t1 = new TestModel();
- t1.Ids = ;
- t1.Names = id+"_"+Guid.NewGuid().ToString();
- list.Add(t1);
- return list;
- }
- public TestModel PostTest(string id, string name)
- {
- TestModel t1 = new TestModel();
- t1.Ids = int.Parse(id);
- t1.Names = name + "_" + Guid.NewGuid().ToString();
- return t1;
- }
- public TestModel PostTest1(TestModel model)
- {
- TestModel t1 = new TestModel();
- t1.Ids = model.Ids;
- t1.Names = model.Names + "_" + Guid.NewGuid().ToString();
- return t1;
- }
- }
接口:
- [ServiceContract]
- public interface IWCFJsonTest
- {
- [OperationContract]
- [WebGet(UriTemplate = "/GetTest/{id}", ResponseFormat = WebMessageFormat.Json)]
- List<TestModel> GetTest(string id);
- [OperationContract]
- [WebInvoke(Method="GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
- TestModel PostTest(string id, string name);
- [OperationContract]
- [WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
- TestModel PostTest1(TestModel model);
- }
配置:
endpoint配置两个一个web使用webHttpBinding,一个给wcf
- <system.serviceModel>
- <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
- <services>
- <service name="BLL.WCFJsonTest" behaviorConfiguration="AllBehavior" >
- <endpoint contract="IBLL.IWCFJsonTest" binding="wsHttpBinding" bindingConfiguration="WsHttpBinding_TEST" address="wcf" />
- <endpoint kind="webHttpEndpoint" contract="IBLL.IWCFJsonTest" binding="webHttpBinding" bindingConfiguration="basicTransport" behaviorConfiguration="web" address="" />
- <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
- </service>
- </services>
- <behaviors>
- <serviceBehaviors>
- <behavior name="AllBehavior">
- <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
- <serviceDebug includeExceptionDetailInFaults="true" />
- </behavior>
- <behavior name="">
- <serviceMetadata httpGetEnabled="true" />
- <serviceDebug includeExceptionDetailInFaults="false" />
- </behavior>
- </serviceBehaviors>
- <endpointBehaviors>
- <behavior name="web">
- <webHttp helpEnabled="true"/>
- </behavior>
- </endpointBehaviors>
- </behaviors>
- <bindings>
- <webHttpBinding>
- <binding name="basicTransport" crossDomainScriptAccessEnabled="true"/>
- </webHttpBinding>
- <wsHttpBinding>
- <binding name="WsHttpBinding_TEST" closeTimeout="00:01:00"
- openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
- allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
- maxBufferPoolSize="" maxReceivedMessageSize=""
- messageEncoding="Text" textEncoding="utf-8"
- useDefaultWebProxy="true">
- <readerQuotas maxDepth="" maxStringContentLength="" maxArrayLength=""
- maxBytesPerRead="" maxNameTableCharCount="" />
- <security mode="None">
- <transport clientCredentialType="None" proxyCredentialType="None"
- realm="" />
- <message clientCredentialType="UserName" algorithmSuite="Default" />
- </security>
- </binding>
- </wsHttpBinding>
- </bindings>
- <standardEndpoints>
- <webHttpEndpoint>
- <standardEndpoint crossDomainScriptAccessEnabled="true"/>
- </webHttpEndpoint>
- </standardEndpoints>
- </system.serviceModel>
调用:
wcf正常调用地址:http://xxxxxx:xxxx/JsonTestService.svc
post:http://xxxxxx:xxxx/JsonTestService.svc/PostTest
get:http://xxxxxx:xxxx/JsonTestService.svc/GetTest/2
例如:
- string srcString=GetData("", "http://xxxxxx:xxxx/JsonTestService.svc/GetTest/2");
- srcString = PostHelper.GetPermissionRemoteData("http://xxxxxx:xxxx/JsonTestService.svc/PostTest","{\"id\":\"10\",\"name\":\"张三\"}","text/json");
- string jsonStr = "{\"Ids\":\"10\",\"Names\":\"张三1\"}";
- srcString = PostHelper.GetPermissionRemoteData("http://xxxxxx:xxxx/JsonTestService.svc/PostTest1", "{\"model\": "+ jsonStr+" }", "text/json");
- WCFJsonTestClient client = new WCFJsonTestClient();
- var r = client.GetTest("");
- var r1 = client.PostTest("", "a");
- var r2 = client.PostTest1(new TestModel() { Ids = , Names = "" });
- $.ajax({
- type: "GET",
- dataType: "jsonp",
- url: 'http://xxxxxx:xxxx/JsonTestService.svc/GetTest/2',
- success: function (data) {
- console.log(data);
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- console.log('err1' + XMLHttpRequest);
- console.log('err2' + textStatus);
- console.log('err3' + errorThrown);
- }
- });
WCF多种调用方式兼容的更多相关文章
- Android开发中怎样调用系统Email发送邮件(多种调用方式)
在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...
- WCF服务调用方式
WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务代理对象进行服务调用.
- Spring MVC一个方法适用多种调用方式
web.xml spring-mvc.xml <mvc:annotation-driven /> <context:component-scan base-package=" ...
- Wcf:可配置的服务调用方式
添加wcf服务引用时,vs.net本来就会帮我们在app.config/web.config里生成各种配置,这没啥好研究的,但本文谈到的配置并不是这个.先看下面的图: 通常,如果采用.NET的WCF技 ...
- SOFA 源码分析 — 调用方式
前言 SOFARPC 提供了多种调用方式满足不同的场景. 例如,同步阻塞调用:异步 future 调用,Callback 回调调用,Oneway 调用. 每种调用模式都有对应的场景.类似于单进程中的调 ...
- Wcf调用方式
C#动态调用WCF接口,两种方式任你选. 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去 ...
- C#高性能TCP服务的多种实现方式
哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...
- C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍
在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一 ...
- WCF初探-10:WCF客户端调用服务
创建WCF 服务客户端应用程序需要执行下列步骤: 获取服务终结点的服务协定.绑定以及地址信息 使用该信息创建 WCF 客户端 调用操作 关闭该 WCF 客户端对象 WCF客户端调用服务存在以下特点: ...
随机推荐
- Lingo 做线性规划 - Revenue Management
Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...
- lucene索引文件大小优化小结
http://www.cnblogs.com/LBSer/p/4068864.html 随着业务快速发展,基于lucene的索引文件zip压缩后也接近了GB量级,而保持索引文件大小为一个可以接受的范围 ...
- bigautocomplete实现联想输入,自动补全
bigautocomplete是一款Jquery插件.用它实现仿搜索引擎文本框自动补全插件功能很实用,使用也很简单,引入了插件之后写几行代码就可以实现,可以灵活设置. 先看效果图: 上图是通过ajax ...
- java集合——题4,6
4.(List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列. 例如: List list = new ArrayList(); list.add(“Hel ...
- iOS开发——高级技术&iCloud服务
iCloud服务 iCloud 是苹果提供的云端服务,用户可以将通讯录.备忘录.邮件.照片.音乐.视频等备份到云服务器并在各个苹果设备间直接进行共享而无需关心数据同步问题,甚至 即使你的设备丢失后在一 ...
- Linux内核启动分析过程-《Linux内核分析》week3作业
环境搭建 环境的搭建参考课件,主要就是编译内核源码和生成镜像 start_kernel 从start_kernel开始,才真正进入了Linux内核的启动过程.我们可以把start_kernel看做平时 ...
- 【VerySky原创】怎样查找到CDHDR、CDPOS表中的OBJECTCLAS字段
可以通过pooled table TCDOB - Objects for change document creation 找到对应的表的对象值: se38 run: RSSCD1TS object ...
- 为什么Android的图片质量会比iPhone的差?
经常看到有人问:“安卓版微信发出去的图片怎么那么渣!比iPhone的差远了!”.不只是微信,很多应用安卓版的图片质量就是要比iPhone版逊色很多,这到底是怎么回事? 我们团队最初也纠结 ...
- Android开源源码推荐(一)
1.Android-ViewPagerIndicator http://www.akaifa.com/code/86/android-viewpagerindicator 实现各种样式的滑动视图(Sc ...
- 向Spotify学习如何设计产品(转)
导语:Spotify是瑞典的精益创业项目,同时保持着很棒的产品交付记录.一般在产品上线之后,开发者才知道人们喜不喜欢它.Spotify如何解决这个问题? 本文转自 kent.zhu's Blog,原文 ...