重庆幸运农场中奖金额|重庆幸运农场官网
MyException - 我的異常網
當前位置:我的異常網» WCF » WCF高速上手(二)

WCF高速上手(二)

www.h0f1.com  網友分享于:2013-10-11  瀏覽:0次
WCF快速上手(二)

一、代碼結構:

二、服務接口Contract和實體類Domain

INoticeService:

using Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace Contract
{
    /// <summary>
    /// 通知公告
    /// </summary>
    [ServiceContract]
    public interface INoticeService
    {
        /// <summary>
        /// 獲取一條公告信息
        /// </summary>
        [OperationContract]
        Notice GetNotice();
    }
}
View Code

Notice:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Domain
{
    /// <summary>
    /// 通知公告
    /// </summary>
    public class Notice
    {
        /// <summary>
        /// 標題
        /// </summary>
        public string Title { get; set; }
        /// <summary>
        /// 內容
        /// </summary>
        public string Content { get; set; }
        /// <summary>
        /// 數據
        /// </summary>
        public byte[] Data { get; set; }
    }
}
View Code

三、服務WcfService和宿主WcfHost

NoticeService:

using Contract;
using Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WcfService
{
    /// <summary>
    /// 通知公告服務
    /// </summary>
    public class NoticeService : INoticeService
    {
        /// <summary>
        /// 獲取一條公告信息
        /// </summary>
        public Notice GetNotice()
        {
            Notice notice = new Notice();
            notice.Title = "測試標題";
            notice.Content = "測試內容";
            notice.Data = new byte[200000];
            for (int i = 0; i < 200000; i++)
            {
                notice.Data[i] = (byte)100;
            }
            return notice;
        }
    }
}
View Code

Program:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WcfService;

namespace WcfServer
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "Service";
            string[] fileArr = Directory.GetFiles(path);
            int port = int.Parse(ConfigurationManager.AppSettings["ServerPort"]);

            foreach (string fileName in fileArr)
            {
                string url = string.Format("http://localhost:{0}/Service/{1}", port, Path.GetFileName(fileName));
                Uri[] uri = new Uri[] { new Uri(url) };

                ServiceHost host = new ServiceHost(typeof(NoticeService), uri);
                host.Open();
            }

            Console.WriteLine("服務成功啟動");
            Console.Read();
        }
    }
}
View Code

服務端App.config配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <appSettings>
    <add key="ServerPort" value="8998"/>
  </appSettings>
  <system.serviceModel>
    <services>
      <service name="WcfService.NoticeService" behaviorConfiguration="ServiceBehavior" >
        <endpoint  contract="Contract.INoticeService" address="" binding="basicHttpBinding" bindingConfiguration="ServiceBinding">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="ServiceBinding" sendTimeout="00:00:20" maxReceivedMessageSize="2147483646">
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
View Code

四、客戶端

NoticeProxy:

using Contract;
using Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace WcfClient
{
    /// <summary>
    /// 通知公告
    /// </summary>
    public class NoticeProxy : INoticeService
    {
        private ChannelFactory<INoticeService> channelFactory;
        private INoticeService server;

        public NoticeProxy()
        {
            channelFactory = new ChannelFactory<INoticeService>("NoticeService");
            server = channelFactory.CreateChannel();
        }

        /// <summary>
        /// 獲取一條公告信息
        /// </summary>
        public Notice GetNotice()
        {
            return server.GetNotice();
        }
    }
}
View Code

客戶端調用服務:

using Domain;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WcfClient;

namespace WinformClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnTest_Click(object sender, EventArgs e)
        {
            try
            {
                NoticeProxy proxy = new NoticeProxy();
                Notice notice = proxy.GetNotice();
                MessageBox.Show(notice.Data.Length.ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
View Code

客戶端App.config配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="ServiceBehavior">
          <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="ServiceBinding"  maxReceivedMessageSize="2147483646">
          <readerQuotas maxArrayLength="65242880" maxStringContentLength="65242880"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint name="NoticeService" contract="Contract.INoticeService"  address="http://localhost:8998/Service/NoticeService.svc" behaviorConfiguration="ServiceBehavior"  binding="basicHttpBinding" bindingConfiguration="ServiceBinding" />
    </client>
  </system.serviceModel>
</configuration>
View Code

 

文章評論

Web開發者需具備的8個好習慣
Web開發者需具備的8個好習慣
初級 vs 高級開發者 哪個性價比更高?
初級 vs 高級開發者 哪個性價比更高?
每天工作4小時的程序員
每天工作4小時的程序員
5款最佳正則表達式編輯調試器
5款最佳正則表達式編輯調試器
程序員最害怕的5件事 你中招了嗎?
程序員最害怕的5件事 你中招了嗎?
“懶”出效率是程序員的美德
“懶”出效率是程序員的美德
 程序員的樣子
程序員的樣子
我跳槽是因為他們的顯示器更大
我跳槽是因為他們的顯示器更大
一個程序員的時間管理
一個程序員的時間管理
漫畫:程序員的工作
漫畫:程序員的工作
60個開發者不容錯過的免費資源庫
60個開發者不容錯過的免費資源庫
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
當下全球最炙手可熱的八位少年創業者
當下全球最炙手可熱的八位少年創業者
程序員和編碼員之間的區別
程序員和編碼員之間的區別
那些爭議最大的編程觀點
那些爭議最大的編程觀點
不懂技術不要對懂技術的人說這很容易實現
不懂技術不要對懂技術的人說這很容易實現
總結2014中國互聯網十大段子
總結2014中國互聯網十大段子
親愛的項目經理,我恨你
親愛的項目經理,我恨你
程序員的鄙視鏈
程序員的鄙視鏈
10個調試和排錯的小建議
10個調試和排錯的小建議
“骯臟的”IT工作排行榜
“骯臟的”IT工作排行榜
什么才是優秀的用戶界面設計
什么才是優秀的用戶界面設計
聊聊HTTPS和SSL/TLS協議
聊聊HTTPS和SSL/TLS協議
程序員周末都喜歡做什么?
程序員周末都喜歡做什么?
那些性感的讓人尖叫的程序員
那些性感的讓人尖叫的程序員
Web開發人員為什么越來越懶了?
Web開發人員為什么越來越懶了?
Google倫敦新總部 猶如星級莊園
Google倫敦新總部 猶如星級莊園
如何區分一個程序員是“老手“還是“新手“?
如何區分一個程序員是“老手“還是“新手“?
旅行,寫作,編程
旅行,寫作,編程
看13位CEO、創始人和高管如何提高工作效率
看13位CEO、創始人和高管如何提高工作效率
程序員眼里IE瀏覽器是什么樣的
程序員眼里IE瀏覽器是什么樣的
我的丈夫是個程序員
我的丈夫是個程序員
中美印日四國程序員比較
中美印日四國程序員比較
要嫁就嫁程序猿—錢多話少死的早
要嫁就嫁程序猿—錢多話少死的早
2013年中國軟件開發者薪資調查報告
2013年中國軟件開發者薪資調查報告
編程語言是女人
編程語言是女人
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
為什么程序員都是夜貓子
為什么程序員都是夜貓子
程序員必看的十大電影
程序員必看的十大電影
2013年美國開發者薪資調查報告
2013年美國開發者薪資調查報告
我是如何打敗拖延癥的
我是如何打敗拖延癥的
老程序員的下場
老程序員的下場
為啥Android手機總會越用越慢?
為啥Android手機總會越用越慢?
鮮為人知的編程真相
鮮為人知的編程真相
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
Java程序員必看電影
Java程序員必看電影
代碼女神橫空出世
代碼女神橫空出世
10個幫程序員減壓放松的網站
10個幫程序員減壓放松的網站
做程序猿的老婆應該注意的一些事情
做程序猿的老婆應該注意的一些事情
軟件開發程序錯誤異常ExceptionCopyright © 2009-2015 MyException 版權所有
重庆幸运农场中奖金额