在控制台中承载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

 

 

 

 

    

 

相关文章