快速阅读

如何用控制台启动一个wcf服务,已经wcf的配置和在类库中如何实现 。

wcf类库

用vs新建一个类库,引用system.ServiceModel

1562771065411

定义接口实现服务契约和操作契约

[ServiceContract]
    public interface IUser
    {
        [OperationContract]
        string GetUserInfo();
    }

定义方法实现接口,定义服务行为

[ServiceBehavior]
    public class User:IUser
    {
        public string GetUserInfo()
        {
            return "username";
        }
    }

控制台启动服务

新建一控制台应用 。引用之前新建的wcf类库,同时在app.config配置wcf服务

<system.serviceModel>
    <services>
      <service name="hcbServiceB.User">
        <!--设置服务节点,服务的地址直接采用基地址,使用basicHttpBinding-->
        <endpoint address="" binding="basicHttpBinding" contract="hcbServiceB.IUser">
        </endpoint>
<!--        ~1~设置元数据交换节点@1@-->
<!--        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange">-->
<!--        </endpoint>-->
        <host>
          <baseAddresses>
            <!--服务的基地址用来访问获取元数据-->
            <add baseAddress="http://localhost:8057/User"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="HttpGetEnable">
          <!--公开元数据,正是部署时候应该去掉防止元数据泄露-->
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="NoneSecurity">
          <!--取消安全验证-->
          <security mode="None">
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>

启动服务

定义serviceHost, 能过wcf类找到servicehost ,然后启动。

static void Main(string[] args)
{
    ServiceHost serivceHost = null;
    Type ServiceType = typeof(IUser);
    Type[] types = typeof(IUser).Assembly.GetTypes();
    foreach (Type type in types)
    {
        if (type.IsInterface || type.IsEnum || type.IsAbstract || type.IsArray ||
            !ServiceType.IsAssignableFrom(type))
            continue;

        serivceHost = new ServiceHost(type);
        serivceHost.Opened += delegate
        {
            Console.WriteLine("[Info]{0} 启动完毕... ", type);
        };
        serivceHost.Faulted += delegate { Console.WriteLine("[Warning]{0} 启动出错!", type); };
        serivceHost.Open();

    }
    Console.ReadLine();
}

测试结果

1562771488867

1562771510995

参考:

wcf元数据相关:https://www.cnblogs.com/xfrog/archive/2010/05/16/1736771.html

友情提示

​ 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题。可以直接在公众号《爱码农爱生活 》留言。必定会再次复查原因。让每一篇 文章的流程都能顺利实现。


本文由 hcb 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论