0

假设我们有 2 个具有以下布局的项目

  • “网络”项目
    • global.asax (我想到了这个在 eg 内注册的目的地void Application_Start(System.Object sender, System.EventArgs e
    • 网络配置
  • 项目“wcf”
    • 演示服务.cs
    • IDemoService.cs

web.config看起来像这样

<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="fooBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="wcf.DemoService"
                     behaviorConfiguration="fooBehavior">
                <endpoint address="mex"
                          binding="mexHttpBinding"
                          contract="IMetadataExchange" />
                <endpoint address=""
                          binding="wsHttpBinding"
                          contract="wcf.IDemoService" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

所以......现在......某个地方(如上所述,我想到了global.asax)我需要注册,当浏览到URI wcf.DemoService时得到解决,对于 mex 请求,wcf.IDemoService得到解决以读取属性以获取 WSDL。

这通常可以通过创建一个.svc文件并将标题放在第一行来完成,例如:

<%@ ServiceHost Language="C#" Debug="true" Service="wcf.DemoService" %>

在例如控制台应用程序中

var serviceHost = new ServiceHost(typeof (wcf.DemoService));
serviceHost.Open();

并将其与host元素内的service元素结合以指定URI - 或使用另一个 ctor-overloadServiceHost

但我宁愿进行静态注册(或任何web.config适用于 IIS 7.5 的注册)——这可能吗?如果是这样,怎么做?

4

1 回答 1

9

WCF 4 (.NET 4.0) 提供基于代码的服务注册和基于配置的服务注册。

基于代码的配置是通过 ASP.NET Routing by new 实现的ServiceRoute

RouteTable.Routes.Add(new ServiceRoute("DemoService", 
                          new ServiceHostFactory(), typeof(wcf.DemoService));

路由通常与 REST 服务一起使用,但它也适用于 SOAP 服务。

在配置中注册服务称为基于配置的激活。您将在 web.config 中定义虚拟 .svc 文件:

<serviceHostingEnvironment>
   <serviceActivation>
      <add relativeAddress="DemoService.svc" service="wcf.DemoService" />
   </serviceActivation>
</serviceHostingEnvironment>

In both cases you are defining only relative path to your service because base address is always specified by your web site hosted in IIS.

于 2012-07-17T17:50:18.970 回答