WCF服务发布和调用IIS服务
最近就要面试了,就把前一段时间学习过的wcf服务又拿出来复习了一边。本来还以为很Easy的东西,谁知道等到真正要做的时候才知道原来有这么多知识要学习!
先来说,把wcf基本服务完成的过程,我是在园子里看着蒋金楠老师的博客一点点做起来的。因为之前做过一次的原因,所以说这次做的时候也没有太用心,随随便便的把代码一抄就万事大吉了。可是把代码写完之后,发现调试不成系统提示如下:
当时,也没有想到是程序哪里出问题了,总以为程序照抄的就应该没有问题,可是后来实在是找不到出错的原因,然后上网百度之后才发现,
原来在服务契约定义的时候没有加上这句话
[ServiceContract(Name = "CalculatorService", Namespace = "http://www.insigmaedu.com/")]
这一点有做一点更正:这一点确实要加【servicecontract】不过不是必须要加(name 和namespace)。这一点谢谢
str.chan
你的第一个错误只是 ICalculator没有声明ServiceContract属性头,而不是有没有指明Name的情况,事实上,指明name只会让你的抽象层跟实现层 变成藕合状态了,不值得推荐,试想,两个项目要针对ICalculator有2个不同的实现,那么你的name不是要改成2个不同的实现类?
当时只是一味的抄,也没有注意到它有什么作用,后来转到定义,看了一下
// 摘要:
// 获取或设置 Web 服务描述语言 (WSDL) 中的 <portType> 元素的名称。
//
// 返回结果:
// 默认值为应用了 System.ServiceModel.ServiceContractAttribute 的类或接口的名称。
//
这些其实大家不用管,只要记得把name赋值给实现接口的类就行了,后边的命名空间因该是不使用也没关系(如果你的程序仅仅使用于调试)具体的我也没有深入研究!!
接下来,就是关于IIS的发布了,这可是折麽死我了!!原来老师讲的时候没有好好听讲,现在发愁了。后来还是一点点的试出来的,首先我在建了一个文件夹,里面有一个BIN文件夹,svc文件,web.config三个文件!其中bin文件夹中要使用服务契约的的DLL(接口),和服务契约实现的DLL(接口的实现),svc文件中只有一句话:
<%@ ServiceHost Language="C#" Debug="true" Service="Services.CalculatorService" %>
这句话中只有service=“”这句话有用。service.calculatorservice是服务契约实现的命名空间.实现类!
接下来就是关于web.config的处理了!对于初学者,使用VS中配套的工具编写是非常方便的。首先打开VS->工具—>WCF服务配置编辑器,点击新建配置文件,服务,新建服务
浏览有服务实现的DLL选中,然后下一步,让后一直下一步就行了。不过有一点要注意,就是在填写终结点地址的时候把输入框清空就行了!
接下来,就是配置服务了,在高级中点击服务行为 点击添加选择
点击servicemetadata,作如下设置
最后把终结点设置如下
把服务添加上点击服务
最后就是保存就行了!最后最重要的就是,因为系统默认的文件名是app.config。但是在这里一定要改名为web.config,因为我们是要用IIS发布的,而不是应用程序了。这一点很重要,刚开始就是因为这一点,让我耽误了不少时间。最后就是用IIs发布了。
打开IIs之后,将文件夹设为默认网站,点击svc文件浏览,就得到已下结果!
把这个超链接“?”之前的都复制下来!然后就是客户端的调用了
在客户端的“引用中左键添加服务引用如下图
然后,点击确定就行了!!
这时候,在debug中运行客户端应用程序,是不是就可以运行了。这样根本就不用运行服务端,不过其实也是运行了的,只要你不关机服务器就运行着!!神奇吧!!
哈哈,写了半天,终于写完了。因为本人是新人,其中有一些地方写的不对,或者有缺陷,都请园子里的朋友们多多指正!接下来把源码附上!!