原来上网我下了很多WCF WEB的Demo。而我用的是VS2005,我在使用这些小样时,基本上绝大部分基于VS2003的Asp.net工程都因为少数文件无法转换而无法加载工程,为此我也苦恼很久,后来终于让我找到了解决办法。
如果address值为空,WCF WEB那么endpoint的地址就是默认的基地址(Base Address)。例如ICalculator服务的地址就是http://localhost/servicemodelsamples/service.svc,而IMetadataExchange服务的地址则为http://localhost/servicemodelsamples/service.svc/mex。这里所谓的基地址可以在<service>中通过配置<host>来定义:
- <service
- name="Microsoft.ServiceModel.Samples.CalculatorService"
- behaviorConfiguration="CalculatorServiceBehavior">
- <host>
- <baseAddresses>
- <add baseAddress=
- "http://localhost/ServiceModelSamples/service.svc"/>
- </baseAddresses>
- </host>
- <endpoint … />
- </service>
当我们在定义一个实现了Service Contract的类时, binding和address信息是客户端必须知道的,否则无法调用该服务。然而,如果需要指定服务在执行方面的相关特性时,就必须定义服务的behavior。在WCF中,定义behavior就可以设置服务的运行时属性,甚至于通过自定义behavior插入一些自定义类型。例如通过指定ServiceMetadataBehavior,可以使WCF WEB服务对外公布Metadata。配置如下:
- <behaviors>
- <serviceBehaviors>
- <behavior name="metadataSupport">
- <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
- </behavior>
- <serviceBehaviors>
- <behaviors>
在WCF WEB中,behavior被定义为Attribute,其中,System.ServiceModel.ServiceBehaviorAttribute和System.ServiceModel.OperationBehaviorAttribute是最常用的behavior。虽然,behavior作为Attribute可以通过编程的方式直接施加到服务上,但出于灵活性的考虑,将behavior定义到配置文件中才是最好的设计方式。