在控制罗利承载WCF服务,并提供Ajax访问和SOAP访问,以及跨域访问

 

3.名字为“soap”的意味将劳动作为soap服务公布,供soap进行走访,去掉后不可以进展soap访问。访问的路子为:基础地址+“soap”

正如1和3的endpoint可以窥见主要的区分在与binding的值,当要开展局地其余的意义是,进行职能配置后,为布局取名字,将名字付给须求的品质

1.2 直接在类地点举行落到实处

究竟soap协议是根据http协议的,当存在访问安全题材时,可以动用常用的web开发时跨域访问的题材进行缓解。大家在呼吁的response头中增进“Access-Control-Allow-Origin”即可解决一点意况下web跨域访问的汉中难点。

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

既然获取了当下乞求的上下文对象,必要做一些别样业务的也足以干自己想干的了,并不仅局限于跨域访问控制了

Ajax, 

1.名字为空的代表将劳动发表,并可以供web调用,其中的机假若binding=”webHttpBinding”,
 web调用时,调用的不二法门为:基础地址”http://localhost:8733/template/Example/"+address(“”)+函数名(当定义了uritemplate时,为uritemplate的值)

能够给艺术添加[WebInvoke()]或者[WebGet()]特性

 

 

 

1.1 使用接口进行落到实处 

1.服务类的已毕

上面附上在github上边的example的地点:WCF_Ajax_CrossDomain

 

与劳务相关的富有的布署音信全部在system.serviceModel节点中,主要有bindings、behaviors、services需要开展布局,下边主要说一下behaviors和services的计划

由此WebOperationContext.Current大家得以拿走到当下伏乞的上下文,在方今哀告的内外文中的response对象的底部添加“Access-Control-Allow-Origin”

2.名字为“mex”的表示将服务的Metadata发表出来,并且可以访问,当去掉该endpoint是,不可以获得元数据音讯

View Code

View Code

 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 }

Ajax 1Ajax 2

Ajax 3Ajax 4

 

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

 

 

Ajax 5Ajax 6

View Code

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

 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>

里面service节点将example作为服务公布出去host描述了眼前的劳务发布的底蕴地址后边的调用或restful调用都是争辩改地址的
endpoint有七个,

 

View Code

 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 }

    

4. ServiceHost

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

当大家要求同时支持web方式访问的时候,大家只要给类添加一些风味即可举办职能的进行

 

俺们得以因而瑟维斯Host对象将劳动承载于一个console application 或winform
application中,具体的代码如下:

  1. Config的配置

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

Ajax 7Ajax 8

 

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

代码如下:

  1. 跨域访问

相关文章