上篇文章中讲述了如何创建一个服务,并且如何通过设置app.config中的某些信息来host这个服务。这一章我们接着这个例子来说明如何使用metadata来暴露这个服务。方法很简单,只要加上一个暴露他的端点(endpoint)即可,这次又是老话重提,ABC。这个endpoint被称为MEX endpoint, 是Metadata EXchange两个单词的首字母合起来的缩写。实现这个也不用写任何代码,只要对配置文件进行一些配置即可。在app.config上打开“Service Configuration Editor”,打开"Advanced"文件夹,然后选中"Service Behaviors",选择添加一个新的service behavior。将NewBehavior改成HelloServiceBehavior,再点击添加按钮,选择'ServiceMetadata'选项。
下面我们为endpoint配置新的行为(behavior)。再次在数节点中选中创建的这个服务。这部分可能是最容易被遗忘的,但是必须将刚刚配置好的行为绑定到这个服务上。其实非常容易,只需要从服务的BehaviorConfiguration属性的列表中选择即可。
接下来就该是添加MEX endpoint了,选择服务下面的"Endpoints"文件夹,右键点击,然后选择添加新endpoint。将地址设置为http://localhost:8080/HelloService/MEX/, 选择绑定方式为"mexHttpBinding",在契约(contract)中填写"IMetadataExchange"。保存,退出配置文件编辑器,就能看到如下的配置信息:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="HelloServiceBehavior">
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="HelloServiceBehavior" name="Classa.Wcf.Samples.Hello">
<endpoint address="http://localhost:8080/HelloService/" binding="basicHttpBinding"
bindingConfiguration="" contract="Classa.Wcf.Samples.IHello" />
<endpoint address="http://localhost:8080/HelloService/MEX/" binding="mexHttpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
</configuration>
按F5运行这个服务,虽然看起来和之前并无太大分别,但是现在我们就能创建一个代理了。打开Visual Studio Command Prompt (打开菜单Visual Studio 2005/Visual Studio Tools就能找到)并执行如下命令:
svcutil.exe /o:client.cs /config:app.config http://localhost:8080/HelloService/MEX/
打开产生的文件,尤其是app.config,就会发现,这个配置文件包含了一份对之前创建的那个服务的一个ABC引用。
注:要查看原始文章,请看这里的全部索引。