WCF自定义宿主示例

using System.IO;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Xml.Serialization;

namespace WcfService
{
    [ServiceContract]
    public interface IBookService
    {
        [OperationContract]
        string GetBook(int id);
    }

    public class BookService : IBookService
    {
        public string GetBook(int id)
        {
            var book = new Book() { Id = id, Name = "DB 2" };
            using (var stringWriter = new StringWriter())
            {
                var xmlSerializer = new XmlSerializer(book.GetType());
                xmlSerializer.Serialize(stringWriter, book);
                return stringWriter.ToString();
            }
        }
    }

    [DataContract]
    public class Book
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string Name { get; set; }
    }
}
using System;
using System.ServiceModel;
using WcfService;

namespace WcfHost
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (ServiceHost host = new ServiceHost(typeof(BookService)))
                {
                    host.Opened += delegate
                    {
                        Console.WriteLine("BookService,使用配置文件,按任意键终止服务");
                    };
                    host.Open();
                    Console.ReadLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:8080/BookService/metadata" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service  behaviorConfiguration="metadataBehavior" name="WcfService.BookService">
        <endpoint address="http://127.0.0.1:8080/BookService" binding="wsHttpBinding" bindingConfiguration="" contract="WcfService.IBookService" />
      </service>
    </services>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
</configuration>
using System;
using System.Collections.Generic;
using System.ServiceModel;
using WcfService;

namespace WcfClient
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ChannelFactory<IBookService> channelFactory = new ChannelFactory<IBookService>("WSHttpBinding_IBookService"))
            {
                var proxy = channelFactory.CreateChannel();
                using (proxy as IDisposable)
                {
                    Console.WriteLine(proxy.GetBook(4));
                }
            }
        }
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IBookService" />
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://127.0.0.1:8080/BookService" binding="wsHttpBinding"
          bindingConfiguration="WSHttpBinding_IBookService" contract="WcfService.IBookService"
          name="WSHttpBinding_IBookService">
        <identity>
          <userPrincipalName value="DEEP-1712200247\Administrator" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

 

posted @ 2018-03-27 00:42  老王子  阅读(160)  评论(0编辑  收藏  举报