• 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             });
  • 相关阅读:
    C# 设计模式
    FutureTask、Fork/Join、 BlockingQueue
    线程的几种创建方式
    行锁、表锁、乐观锁、悲观锁
    J.U.C之AQS
    同步容器并发容器
    线程不安全类
    线程封闭
    不可变对象
    安全发布对象—单例模式
  • 原文地址:https://www.cnblogs.com/zengwei/p/4548646.html
Copyright © 2020-2023  润新知