同洲共际海让路@小舟侧盼千帆过,扬帆寻她千百度
+U, 抬头仰望,低头思索@同洲共际海让路

    上篇文章中讲述了如何创建一个服务,并且如何通过设置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引用。

    注:要查看原始文章,请看这里的全部索引

posted on 2007-11-29 00:13  同洲共际海让路  阅读(597)  评论(0编辑  收藏  举报