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

   随着.NET Framewrok 3.0的发布,我再也不用在我的虚拟机VMWare中折腾了。下面就让我们为上一篇文章中使用到的服务契约创建一个托管(host)。为简便起见,我们用一个控制台程序来进行演示。
   要host服务,必须创建一个ServiceHost对象,ServiceHost类实现了IDisposable接口,因此我们可以使用using语句来创建他(译者注:使用using语句创建实现了IDisposable接口的类,在程序离开using语句的范围时,会自动调用其Dispose方法释放对象)。

using (ServiceHost host = new ServiceHost(xxx))
{
}

   上面代码中的三个X,表示需要传递一个servicetype参数,对于我们这里的例子而言,就是Hello契约。在能够被WCF使用之前,我们必须将创建的这个host打开。

Type type = typeof(Hello);
 
using (ServiceHost host = new ServiceHost(type))
{
  host.Open();
 
  Console.WriteLine("The service is available. Press any key to continue...");
  Console.ReadKey();
 
  host.Close();
}

   在上面的例程中,首先声明了一个type变量,并将Hello服务契约类型赋给他,然后再将其作为参数传递给ServiceHost,就创建好了一个ServiceHost实例。然后打开这个服务,在控制台应用程序中显示出运行信息以及提示用户输入的信息,如果不加上等待用户向控制台输入的语句,服务就会立即终止。

   WCF需要从配置文件中得到需要的信息,这个配置文件毫无疑问就是app.config。在配置文件中,需要指定WCF的ABC。上面已经创建好了服务契约,但是还需要让WCF知道,在那个地址上,通过何种方式的绑定,才能绑定到某个契约中。第一步,编译应用程序。第二步,添加一个app.config文件,右键点击它,选择'Edit WCF Configuration...',就能看到“Service Configuration Editor”,选择'Create a New Service...",就会出现一个友好的向导式操作界面。

   向导的第一步,我们需要告诉WCF,我们要使用什么样的服务以及这个服务的具体实现。选择浏览并找到上面的这个控制台应用程序,选择它,就能看到Hello类,选中即可。向导的下一个页面中,就会呈现出IHello 就是我们要使用的契约。这里我们可以选择我们需要使用的绑定方式以及使用的协议,这里我们选择缺省参数即可。接下来的步骤就是选择缺省设置,二个类型之间的区别大致可以视为标准ASP.NET ASMX webservices同WSE 3.0 extension之间的区别。

   WCF ABC的最后一步就是选择一个地址,比如:http://localhost:8080/HelloService/。选择这个地址后,系统会对选择的这个服务提供一个预览。注意仔细检查一下向导都在Service Configuration Editor中更改了那些东西。目前需要深入研究的就是"Services"文件夹,因为其他的我们都可以保持不变。设置完之后,查看app.config,就能看到如下的内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 
    <system.serviceModel>
        <services>
            <service name="Classa.Wcf.Samples.Hello">
                <endpoint
                  address="http://localhost:8080/HelloService/"
                  binding="basicHttpBinding"                  
                  contract="Classa.Wcf.Samples.IHello"
                  bindingConfiguration="" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

    注意上面的配置文件中,只设置了一个服务,而这个服务的名称空间为Classa.Wcf.Samples, 这是系统自动给加上去的。你可以查看附件中的代码得到有关与此的更多信息。目前在这里bindingConfiguration属性并不是必须的,最重要的还是ABC:Address, binding以及contract!

    运行之,服务就会可以见,但是如何同这个服务进行通信呢?请看下一帖。

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

posted on 2007-11-27 23:27  同洲共际海让路  阅读(1631)  评论(3编辑  收藏  举报