在控制台中承载WCF服务,并提供Ajax访问和SOAP访问,以及跨域访问
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在控制台中承载WCF服务,并提供Ajax访问和SOAP访问,以及跨域访问,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3502字,纯文字阅读大概需要6分钟。
内容图文
WCF服务可以承载与iis、winform、console、window服务中,下面重点介绍以console为载体,对外提供服务(服务满足web访问以及soap方式访问)
1.服务类的实现
wcf服务类一般有两种实现方式,下面分别对两种方式进行介绍:
1.1 使用接口进行实现
1 namespace Example 2 { 3 [ServiceContract] 4 public interface IService 5 { 6 7 [OperationContract] 8 string GetData(int value); 9// TODO: 在此添加您的服务操作10 } 11} 1213namespace Example 14{ 1516publicclass Service1 : IService 17 { 18publicstring GetData(int value) 19 { 20returnstring.Format("You entered: {0}", value); 21 } 22 } 23 }
1.2 直接在类上面进行实现
1 namespace Example 2 { 3 [ServiceContract] 4 public class Service1 5 { 6 [OperationContract] 7 public string GetData(int value) 8 { 9returnstring.Format("You entered: {0}", value); 10 } 11 } 12 }
当我们需要同时支持web方式访问的时候,我们只要给类添加一些特性即可进行功能的拓展
可以给类添加[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
可以给方法添加[WebInvoke()]或者[WebGet()]特性
注意:[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]只能添加在类上面 而[WebInvoke()]和[WebGet()]可以添加在接口中,也可以添加在类中
2. Config的配置
与服务相关的所有的配置信息全部在system.serviceModel节点中,主要有bindings、behaviors、services需要进行配置,下面主要说一下behaviors和services的配置
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有三个,
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的值,当要进行一些其它的功能是,进行功能配置后,为配置取名字,将名字付给需要的属性
3. 跨域访问
说到底soap协议是基于http协议的,当存在访问安全问题时,可以使用常用的web开发时跨域访问的问题进行解决。我们在请求的response头中添加“Access-Control-Allow-Origin”即可解决某些情况下web跨域访问的安全问题。
通过WebOperationContext.Current我们可以获取到当前请求的上下文,在当前请求的上下文中的response对象的头部添加“Access-Control-Allow-Origin”
代码如下:
1 WebOperationContext ctx = WebOperationContext.Current; 2 ctx.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
既然获取了当前请求的上下文对象,需要做一些其它事情的也可以干自己想干的了,并不仅仅局限于跨域访问控制了
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
原文:http://www.cnblogs.com/zp900704/p/5781390.html
内容总结
以上是互联网集市为您收集整理的在控制台中承载WCF服务,并提供Ajax访问和SOAP访问,以及跨域访问全部内容,希望文章能够帮你解决在控制台中承载WCF服务,并提供Ajax访问和SOAP访问,以及跨域访问所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。