• 20190710用控制台启动一个wcf服务


    快速阅读

    如何用控制台启动一个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

    友情提示

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

  • 相关阅读:
    Effective C++ 读书笔记(3544):继承关系与面向对象设计
    《全景探秘游戏设计艺术》读后感之引子
    Effective C++ 读书笔记(1117):构造析构和赋值函数
    Effective C++ 读书笔记(2934):类与函数之实现
    Unity中使用PersistentDataPath加载文件
    打开本地【C】【D】【E】驱动器时候提示 X:\ 找不到应用程序
    C#进制转换
    在VS里编辑unity代码调用系统方法不显示中文注释或英文注释
    Spreadsheet说明
    C#中删除控件的事件的方法类.
  • 原文地址:https://www.cnblogs.com/hsapphire/p/11173348.html
Copyright © 2020-2023  润新知