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客户端调用服务存在以下特点: ... 
随机推荐
- js 函数提升和变量提升
			总结: 函数提升比变量提升优先级高! 词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行 ... 
- hasOwnProperty()&&isPrototypeOf()
			1.hasOwnProperty() hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性.如果有,返回true,否则返回false. 该方法属于Object ... 
- 记一次https访问握手失败(handshake failure)
			文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6239518.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ... 
- Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓  O725
			Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ... 
- IOS开发-图片尺寸
			在这篇文章当中,不会讲述关于具体px pt,分辨率,像素的问题,在这篇文章中,只会谈及到一些展现的问题 如果想了解更多关于pt,px之间的关系可以自行到百度查找相关的答案,或者到以下地址阅读更多相关的 ... 
- 日常开发中常见的HTTP协议的状态码
			301Moved Permanently请求的网页已永久移动到新位置.服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将申请人转到新位置.您应使用此代码告诉 Googlebot 某个 ... 
- QT210 Android4.0源码编译和烧录文档整理
			开发环境说明: Ubuntu 12.04 LTS 32bit 源码文件目录: 勤研光盘2013-5-4\4.0 https://github.com/jackyh (建议在Linux环境下通过git下 ... 
- iOS开发拓展篇——如何把项目托管到GitHub
			iOS开发拓展篇——如何把项目托管到GitHub 说明:本文主要介绍如何把一个OC项目托管到Github,重操作轻理论. 第一步:先注册一个Github的账号,这是必须的 注册地址:Github官网注 ... 
- RTX的api開發實例
			RTX的api開發實例 最近接觸了RTX的接口開發部份,RTX其实有很多玩法,除了可以用自帶的客戶端發消息之外還可以用PHP調用API的方式來做一些事情,下邊整理了一下分享給大家 值得提醒的是这些接口 ... 
- Scrum介绍
			Scrum介绍 摘要 如今,项目管理的步伐越来越快.项目管理需要更灵活.更积极地,向应客户的需求.使用敏捷项目管理方法,项目经理可以在不影响价值.质量和商业规则的前提下实现所有目标,Scrum是一种迭 ... 
