在控制斯科普里承载WCF服务,并提供Ajax访问和SOAP访问,以及跨域访问

WCF服务可以承接与iis、winform、console、window服务中,下边重点介绍以console为载体,对外提供劳务(服务满足web访问以及soap格局访问)

 

1.服务类的落成

   wcf服务类一般有三种完成格局,下边分别对二种方法进行介绍:

1.1 使用接口举办落实 

图片 1图片 2

 1 namespace Example
 2 {
 3     [ServiceContract]
 4     public interface IService
 5     {
 6 
 7         [OperationContract]
 8         string GetData(int value);
 9         // TODO: 在此添加您的服务操作
10     }
11 }
12 
13 namespace Example
14 {
15 
16     public class Service1 : IService
17     {
18         public string GetData(int value)
19         {
20             return string.Format("You entered: {0}", value);
21         }
22     }
23 }

View Code

1.2 间接在类地点进行落到实处

图片 3图片 4

 1 namespace Example
 2 {
 3     [ServiceContract]
 4     public class Service1
 5     {
 6         [OperationContract]
 7         public string GetData(int value)
 8         {
 9             return string.Format("You entered: {0}", value);
10         }
11     }
12 }

View Code

 

当我们要求同时帮衬web情势访问的时候,大家只要给类添加一些风味即可进行成效的进展

可以给类添加[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]

可以给艺术添加[WebInvoke()]或者[WebGet()]特性

注意:[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]只能够添加在类地点而[WebInvoke()]和[WebGet()]可以添加在接口中,也可以添加在类中

 

  1. Config的配置

与劳务相关的有着的配置音讯全体在system.serviceModel节点中,首要有bindings、behaviors、services必要开展配备,上边主要说一下behaviors和services的布置

 

图片 5图片 6

 1 <behaviors>
 2     <serviceBehaviors>
 3         <behavior name="">
 4             <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
 5             <serviceDebug includeExceptionDetailInFaults="false" />
 6         </behavior>
 7     </serviceBehaviors>
 8     <endpointBehaviors>
 9         <behavior name="Example.Service">
10             <webHttp />
11         </behavior>
12     </endpointBehaviors>
13 </behaviors>
14 <services>
15     <service name="template.Example">
16         <endpoint address="" behaviorConfiguration="Example.Service" binding="webHttpBinding" contract="Example.Service" />
17         <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
18         <endpoint address="Soap" binding="basicHttpBinding" contract="Example.Service" />
19         <host>
20             <baseAddresses>
21                 <add baseAddress="http://localhost:8733/template/Example/" />
22             </baseAddresses>
23         </host>
24     </service>
25 </services>

View Code

里头service节点将example作为劳动发表出来host描述了脚下的服务公布的底子地址前面的调用或restful调用都是对峙改地址的
endpoint有五个,

1.名字为空的表示将劳动公布,并能够供web调用,其中的重即使binding=”webHttpBinding”,
 web调用时,调用的方法为:基础地址”http://localhost:8733/template/Example/"+address(“”)+函数名(当定义了uritemplate时,为uritemplate的值)

2.名字为“mex”的代表将劳动的Metadata揭橥出来,并且可以访问,当去掉该endpoint是,无法得到元数据音信

3.名字为“soap”的表示将劳动作为soap服务发布,供soap举行走访,去掉后不可以展开soap访问。访问的门道为:基础地址+“soap”

相比较1和3的endpoint可以窥见根本的差别在与binding的值,当要举行部分别样的成效是,举办职能配置后,为布局取名字,将名字付给须求的特性

 

  1. 跨域访问

究竟soap协议是基于http协议的,当存在访问安全难题时,可以接纳常用的web开发时跨域访问的标题开展解决。大家在伸手的response头中丰盛“Access-Control-Allow-Origin”即可缓解一点情状下web跨域访问的安全题材。

透过WebOperationContext.Current大家可以获得到当前恳请的上下文,在当下呼吁的左右文中的response对象的头顶添加“Access-Control-Allow-Origin”

代码如下:

图片 7图片 8

1 WebOperationContext ctx = WebOperationContext.Current;
2 ctx.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");

View Code

既然如此获取了现阶段呼吁的上下文对象,要求做一些别样工作的也可以干自己想干的了,并不只局限于跨域访问控制了

 

4. ServiceHost

俺们可以透过ServiceHost对象将服务承载于一个console application 或winform
application中,具体的代码如下:

static void Main(string[] args)
{
    ServiceHost host = new ServiceHost(typeof(CaAgent));
    host.Open();
    Console.WriteLine("数据服务开启");
    while(Console.ReadLine()!="quit"){
    }
    host.Close();
}

 

上边附上在github下面的example的地方:WCF_Ajax_CrossDomain

 

 

 

 

    

 

相关文章