WCF多种调用方式兼容

原文:WCF多种调用方式兼容

1、能被ajax get

2、能post

3、wcf正常调用

实现:

 1     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
 2     [JavascriptCallbackBehavior(UrlParameterName = "jsoncallback")]
 3     public class WCFJsonTest : IWCFJsonTest
 4     {
 5
 6         public List<TestModel> GetTest(string id)
 7         {
 8             List<TestModel> list = new List<TestModel>();
 9             TestModel t = new TestModel();
10             t.Ids = 1;
11             t.Names = id;
12             list.Add(t);
13
14             TestModel t1 = new TestModel();
15             t1.Ids = 1;
16             t1.Names = id+"_"+Guid.NewGuid().ToString();
17             list.Add(t1);
18
19             return list;
20         }
21
22
23         public TestModel PostTest(string id, string name)
24         {
25             TestModel t1 = new TestModel();
26             t1.Ids = int.Parse(id);
27             t1.Names = name + "_" + Guid.NewGuid().ToString();
28             return t1;
29         }
30
31
32         public TestModel PostTest1(TestModel model)
33         {
34             TestModel t1 = new TestModel();
35             t1.Ids = model.Ids;
36             t1.Names = model.Names + "_" + Guid.NewGuid().ToString();
37             return t1;
38         }
39     }

接口:

 1 [ServiceContract]
 2
 3     public interface IWCFJsonTest
 4     {
 5         [OperationContract]
 6         [WebGet(UriTemplate = "/GetTest/{id}", ResponseFormat = WebMessageFormat.Json)]
 7         List<TestModel> GetTest(string id);
 8
 9         [OperationContract]
10         [WebInvoke(Method="GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
11         TestModel PostTest(string id, string name);
12
13         [OperationContract]
14         [WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
15         TestModel PostTest1(TestModel model);
16     }

配置:

endpoint配置两个一个web使用webHttpBinding,一个给wcf

 1 <system.serviceModel>
 2     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
 3     <services>
 4       <service name="BLL.WCFJsonTest" behaviorConfiguration="AllBehavior" >
 5         <endpoint contract="IBLL.IWCFJsonTest" binding="wsHttpBinding" bindingConfiguration="WsHttpBinding_TEST" address="wcf" />
 6         <endpoint kind="webHttpEndpoint" contract="IBLL.IWCFJsonTest" binding="webHttpBinding" bindingConfiguration="basicTransport" behaviorConfiguration="web" address="" />
 7         <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
 8       </service>
 9     </services>
10
11     <behaviors>
12       <serviceBehaviors>
13         <behavior name="AllBehavior">
14           <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
15           <serviceDebug includeExceptionDetailInFaults="true" />
16         </behavior>
17         <behavior name="">
18           <serviceMetadata httpGetEnabled="true" />
19           <serviceDebug includeExceptionDetailInFaults="false" />
20         </behavior>
21       </serviceBehaviors>
22       <endpointBehaviors>
23         <behavior name="web">
24           <webHttp helpEnabled="true"/>
25         </behavior>
26       </endpointBehaviors>
27     </behaviors>
28     <bindings>
29       <webHttpBinding>
30         <binding name="basicTransport" crossDomainScriptAccessEnabled="true"/>
31       </webHttpBinding>
32       <wsHttpBinding>
33         <binding name="WsHttpBinding_TEST" closeTimeout="00:01:00"
34         openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
35         allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
36          maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
37         messageEncoding="Text" textEncoding="utf-8"
38         useDefaultWebProxy="true">
39           <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
40        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
41           <security mode="None">
42             <transport clientCredentialType="None" proxyCredentialType="None"
43         realm="" />
44             <message clientCredentialType="UserName" algorithmSuite="Default" />
45           </security>
46         </binding>
47       </wsHttpBinding>
48     </bindings>
49     <standardEndpoints>
50       <webHttpEndpoint>
51         <standardEndpoint crossDomainScriptAccessEnabled="true"/>
52       </webHttpEndpoint>
53     </standardEndpoints>
54   </system.serviceModel>

调用:

wcf正常调用地址:http://xxxxxx:xxxx/JsonTestService.svc

post:http://xxxxxx:xxxx/JsonTestService.svc/PostTest

get:http://xxxxxx:xxxx/JsonTestService.svc/GetTest/2

例如:

 1 string srcString=GetData("", "http://xxxxxx:xxxx/JsonTestService.svc/GetTest/2");
 2
 3                 srcString = PostHelper.GetPermissionRemoteData("http://xxxxxx:xxxx/JsonTestService.svc/PostTest","{\"id\":\"10\",\"name\":\"张三\"}","text/json");
 4
 5                 string jsonStr = "{\"Ids\":\"10\",\"Names\":\"张三1\"}";
 6                 srcString = PostHelper.GetPermissionRemoteData("http://xxxxxx:xxxx/JsonTestService.svc/PostTest1", "{\"model\": "+ jsonStr+" }", "text/json");
 7
 8                 WCFJsonTestClient client = new WCFJsonTestClient();
 9                 var r = client.GetTest("1");
10                 var r1 = client.PostTest("1", "a");
11                 var r2 = client.PostTest1(new TestModel() { Ids = 1, Names = "2" });
 1 $.ajax({
 2                 type: "GET",
 3                 dataType: "jsonp",
 4                 url: ‘http://xxxxxx:xxxx/JsonTestService.svc/GetTest/2‘,
 5                 success: function (data) {
 6                     console.log(data);
 7                 },
 8                 error: function (XMLHttpRequest, textStatus, errorThrown) {
 9                     console.log(‘err1‘ + XMLHttpRequest);
10                     console.log(‘err2‘ + textStatus);
11                     console.log(‘err3‘ + errorThrown);
12                 }
13             });
时间: 2024-10-11 21:45:38

WCF多种调用方式兼容的相关文章

WCF系列之WCF服务调用方式

WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务代理对象进行服务调用. 通过SvcUtil.exe的方式调用服务 SvcUtil.exe是一个命令行工具,位于:C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin目录下,可以将SvcUtil.exe添加到VS2010中方便以后的运用,添加方式:在VS2010的Tools菜单中选择External T

Spring MVC一个方法适用多种调用方式

web.xml spring-mvc.xml <mvc:annotation-driven /> <context:component-scan base-package="com.cnfwsy" /> <context:annotation-config /> <!-- 避免IE在ajax请求时,返回json出现下载 <bean id="jacksonMessageConverter" class="org

Wcf:可配置的服务调用方式

添加wcf服务引用时,vs.net本来就会帮我们在app.config/web.config里生成各种配置,这没啥好研究的,但本文谈到的配置并不是这个.先看下面的图: 通常,如果采用.NET的WCF技术来架构SOA风格的应用,我们会把项目做一些基本的分层,如上图: 01. contract层:通常定义服务的接口(即服务契约ServiceContract,指明该服务提供了哪些方法可供外部调用).以及接口方法中传输的Model定义(即:数据契约DataContract,指明方法中的对象参数的Clas

顺序表及其多种实现方式 --- C/C++

所谓顺序表,即线性表的顺序存储结构.下面给出的是数据结构---线性表的定义. ADT List{ 数据对象: 线性表的数据对象的集合为{a1,a2,a3,...,an},每个元素的类型为ElemType. 数据关系: 除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每个元素有且仅有一个直接后继元素. 数据元素之间的关系是一对一的关系. 基础操作: InitList(&L);  //构造一个空的线性表 DestroyList(&L); //销毁线性表 Clea

ListView上拉加载和下拉刷新多种实现方式

ListView上拉加载和下拉刷新多种实现方式 该篇为ListView下拉刷新和上拉加载实现的各种方法大合集.可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现.细节方面,个人可以根据自己的需求进行完善. 该博客将以四种思路来完成下拉刷新和上拉加载 自定义View实现上拉加载和下拉刷新 使用PullToRefresh 实现上拉加载和下拉刷新 使用Ultra-Pull-To-Refresh实现上拉加载和下拉刷新 使用SwipeToRefreshLayout实现上拉加载和下拉刷新 如果你对L

C#高性能TCP服务的多种实现方式

轉載:http://www.cnblogs.com/gaochundong/p/csharp_tcp_service_models.html 本篇文章的主旨是使用 .NET/C# 实现 TCP 高性能服务的不同方式,包括但不限于如下内容: APM 方式,即 Asynchronous Programming Model TAP 方式,即 Task-based Asynchronous Pattern SAEA 方式,即 SocketAsyncEventArgs RIO 方式,即 Registere

转载——Java与WCF交互(二):WCF客户端调用Java Web Service

在上篇< Java与WCF交互(一):Java客户端调用WCF服务>中,我介绍了自己如何使用axis2生成java客户端的悲惨经历.有同学问起使用什么协议,经初步验证,发现只有wsHttpBinding可行,而NetTcpBinding不可行,具体原因待查.昨晚回去重新测试WCF客户端调用Java Web Service,并将过程公布如下: 其实本不需要做web service,只是原来公开的经典的Web service像(http://soapinterop.java.sun.com/rou

C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍

原文:C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍 在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一种是普通的Url菜单(类型为View的菜单),一种是事件菜单(类型为Click的菜单),一般情况下,微信的Url菜单,是无法获得用户的任何信息的,但微信用户信息非常重要,因此也提供了另外一种方式(类似重定向的方式)来给我们使用,本篇

C# 高性能 TCP 服务的多种实现方式

哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C# 编写 TCP 服务的花样姿势!>. 本篇文章的主旨是使用 .NET/C# 实现 TCP 高性能服务的不同方式,包括但不限于如下内容: APM 方式,即 Asynchronous Programming Model TAP 方式,即 Task-based Asynchronous Pattern SAEA 方式,即 SocketAsyncEventAr