C# Visual Studio 2010.NET Framework 4 Visual C# WPF 第 1 章 Visual Studio 2010 概述.NET Framework 4 Visual Studio 2010 第 2 章建立 WPF 視窗應用程式 WPF Visual Studio 2010 WPF C# 第 3 章 WPF 基本控制項 WPF WPF Label TextBox Button 第 4 章建立 WPF 功能表選單 WPF WPF WPF WPF viii
Visual C# 2010 與 UML 開發實戰 C# 第 5 章物件導向基礎 C# C# 第 6 章資料與變數 C# 第 7 章判斷式與迴圈 C# 第 8 章陣列與集合 C# 第 9 章偵錯與例外狀況處理 Visual Studio 2010 C# try...catch ix
導讀 第 10 章自訂副程式 C# 第 11 章物件導向進階 C# C# UML 第 12 章 LINQ C# Language-Integrated Query (LINQ) LINQ LINQ to XML LINQ to SQL LINQ 第 13 章結合 WF 開發 WPF 應用程式 Visual Studio 2010 Windows Workflow Foundation (WF) x
Visual C# 2010 與 UML 開發實戰 第 14 章結合 WCF 開發 WPF 應用程式.NET Framework 4 Windows Communication Foundation (WCF) WCF C# C# WCF WF WCF 第 15 章使用 UML 建立專案模型 UML(Unified Modeling Language) Visual Studio 2010 UML UML Visual Studio 2010 UML UML 範例程式下載 http://www.delightpress.com.tw/book.aspx?book_id=sknp00020 xi
Chapter 14 WCF WPF
Service Oriented Architecture SOA.NET.NET Framework Windows Communication Foundation (WCF) Windows Communication Foundation WF 14-01 Windows Communication Foundation Windows Communication Foundation (WCF).NET Framework WCF WCF WCF 13 WF WPF WF 14-1-1 WCF.NET Windows Component Service DCOM 1.NET 1 Java EJB (Enterprise Java Bean) 406 Visual C# 2010 UML
TCP/IP Web Service Http Http SOA 14-1 SOA 09 10 11 12 13 14-0114 15 Windows Communication Foundation 14-1 HTML JavaScript CHAPTER 14 WCF WPF 407
14-2 Web.NET Framework 1.0.NET Framework 1.0 Remoting SOA SOA.NET Framework Windows Communication Foundation (WCF) WCF 2 WCF Address Binding Contract 3 ABC.NET WCF 14-3 2 ABC (Address Binding Contract) 3 408 Visual C# 2010 UML
09 10 14-3 WCF Visual Studio 2010 WCF Visual Studio 2010 WCF 14-1-2 WCF Visual Studio 2010 WCF WCF WCF 11 12 13 14-0114 15 Windows Communication Foundation 14-4 WCF CHAPTER 14 WCF WPF 409
Visual Studio 2010 IService1.cs Service1.cs Visual Studio 2010 App.Config WCF WCF Contract WCF ServiceContract OperationContract DataContract WCF 4 public interface ICalculator double Add(double n1, double n2); double Subtract(double n1, double n2); double Multiply(double n1, double n2); double Divide(double n1, double n2); ServiceContract OperationContract using System.ServiceModel; [ServiceContract] public interface ICalculator [OperationContract] double Add(double n1, double n2); [OperationContract] 4 System.ServiceModel 410 Visual C# 2010 UML
double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); DataContract public class CalculatorService : ICalculator #region ICalculator public double Add(double n1, double n2) return n1 + n2; public double Subtract(double n1, double n2) return n1 - n2; public double Multiply(double n1, double n2) return n1 * n2; public double Divide(double n1, double n2) return n1 / n2; #endregion 09 10 11 12 13 14-0114 15 Windows Communication Foundation DataContract DataMember Employee // Employee [DataContract] public class Employee string empid = "Not Set"; CHAPTER 14 WCF WPF 411
string empname = "Not Set"; [DataMember] public string EmpID get return empid; set empid = value; [DataMember] public string empname get return empname; set empname = value; 14-1-3 WCF Address Binding Visual Studio 2010 WCF WCF App.config WCF 14-5 14-5 WCF WCF Client 412 Visual C# 2010 UML
09 10 14-6 WCF WCF Name bin\debug 14-7 11 12 13 14-0114 15 Windows Communication Foundation 14-7 CHAPTER 14 WCF WPF 413
WCF Endpoint ServiceHost Base Address 1 2 14-8 http://localhost:1117/ch16sample/calculator Endpoint WCF WCF 414 Visual C# 2010 UML
Address Binding Contract WCF WCF 14-1 WCF BasicHttpBinding WS-Basic Profile Web ASP.NET Web Service (.ASMX) WSHttpBinding WS WS2007HttpBinding W S H t t p B i n d i n g ReliableSession OASIS WSDualHttpBinding WS WSFederationHttpBinding WS-Federation WS2007FederationHttpBinding WS2007HttpBinding OASIS NetTcpBinding TCP/IP WCF 09 10 11 12 13 14-0114 15 Windows Communication Foundation NetNamedPipeBinding NetMsmqBinding NetPeerTcpBinding WebHttpBinding MsmqIntegrationBinding NamePipe WCF WCF Peer to Peer Http SOAP WCF 14-1 WCF.NET Framework 1.0 2.0 Binding BaiscHttpBinding ws-* WSHttpBinding WSDualHttpBinding CHAPTER 14 WCF WPF 415
Visual Studio 2010 Service Behavior Metadata 1. WCF 2. servicemetadata 14-9 1 2 14-9 3. servicemetadata HttpGetEnabled True 14-10 14-10 Http Get 416 Visual C# 2010 UML
4. WCF Service BehaviorConfiguration Step02 14-11 14-11 WCF App.config 14-1-4 WCF Visual Studio 2010 WCF Visual Studio 2010 F5 Visual Studio 2010 WCF WcfSvcHost.exe WCF WCF 14-12 09 10 11 12 13 14-0114 15 Windows Communication Foundation 14-12 WCF WCF Visual Studio 2010 WCF WCF WcfTestClient.exe WCF WCF CHAPTER 14 WCF WPF 417
WCF 14-13 14-13 WCF WCF 14-1-5 WCF WCF WCF.NET WCF.NET.NET ServiceHost ServiceHost ServiceHost servicehost = new ServiceHost(typeof(CalculatorService)) ServiceHost Open Close ServiceHost try...catch 418 Visual C# 2010 UML
try servicehost.open(); // servicehost.close(); catch(exception e) // WCF WCF App.config Visual Studio 2010 WCF Service Configuration Editor WCF Windows Service Windows Service ServiceHost OnStart OnStop Installer (IIS) 09 10 11 12 13 14-0114 15 Windows Communication Foundation IIS ASP.NET IIS HTTP WCF IIS Web AppDomain IIS.svc svc @ServiceHost <%@ServiceHost language=c# Service=" CalculatorService"%> WCF web.config CHAPTER 14 WCF WPF 419
<system.servicemodel> <service behaviorconfiguration="calculatorbehavior" name="service.calculatorservice"> <endpoint binding="basichttpbinding" contract="service.icalculator" /> <host> <baseaddresses> <add baseaddress="http://localhost:1117/ch16sample/calculator" /> </baseaddresses> </host> </service> </services> <behaviors> <servicebehaviors> <behavior name="calculatorbehavior"> <servicemetadata httpgetenabled="true" /> </behavior> </servicebehaviors> </behaviors> </system.servicemodel> Windows Process Activation Service (WAS) Windows Process Activation Service (WAS) Windows Server 2008 Windows Vista IIS 6.0 HTTP WAS HTTP IIS IIS 7.0 WAS HTTP WCF WAS WCF TCP MSMQ IIS WAS IIS Http Practice 14-1 WCF 1. Visual Studio 2010 420 Visual C# 2010 UML
2. WCF WCF \ Practices\Ex14_01\starter MyServiceLib Practice14 14-14 2 1 3 14-14 Practice 14-1 3. Service1.cs IService1. cs 09 10 11 12 13 14-0114 15 Windows Communication Foundation WCF WCF 1. MyServiceLib MyClassDiagram.cd 2. MyClassDiagram ICalculatorService CHAPTER 14 WCF WPF 421
3. ICalculatorService Add 4. Add num1 num2 double Add Add double 14-15 14-15 Add 5. Step03~04 ICalculatorService Subtract Multiply Divide double double 5 ICalculatorService 14-16 14-16 ICalculator 6. ICalculatorService System.ServiceModel using System.ServiceModel; 7. ICalculatorService [ServiceContract] 5 422 Visual C# 2010 UML
8. ICalculatorService Add Subtract Multiply Divide [OperationContract] ICalculatorService using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; namespace MyServiceLib [ServiceContract] public interface ICalculatorService [OperationContract] double Add(double num1, double num2); [OperationContract] double Subtract(double num1, double num2); [OperationContract] double Multiply(double num1, double num2); [OperationContract] double Divide(double num1, double num2); 9. MyClassDiagram CalculatorService 09 10 11 12 13 14-0114 15 Windows Communication Foundation 10. CalculatorService ICalculatorService CalculatorService ICalculatorService 14-17 14-17 MyClassDiagram CHAPTER 14 WCF WPF 423
11. CalculatorService CalculatorService public double Add(double num1, double num2) return num1 + num2; public double Subtract(double num1, double num2) return num1 - num2; public double Multiply(double num1, double num2) return num1 * num2; public double Divide(double num1, double num2) return num1 / num2; WCF 1. MyServiceLib App.config WCF WCF 2. MyServiceLib.Service1 3. Configuration 4. :NewServiceType Name 5. bin\debug MyServiceLib.dll MyServiceLib.CalculatorService Open 14-18 424 Visual C# 2010 UML
09 10 14-18 WCF 6. MyServiceLib.CalculatorService 14-19 11 12 13 14-0114 15 Windows Communication Foundation 14-19 CHAPTER 14 WCF WPF 425
7. http://localhost:1117/wcfsample/ 8. MyServiceLib.CalculatorService 9. Contract 10. bin\debug MyServiceLib.dll MyServiceLib.ICalculatorService 14-20 14-20 WCF 11. M y S e r v i c e L i b. C a l c u l a t o r S e r v i c e : MyServiceLib.CalculatorService BehaviorConfiguration MyServiceLib.Service1.Behavior 6 6 WCF 426 Visual C# 2010 UML
12. WCF WCF WPF 1. Visual Studio 2010 Windows WPF CalculatorServiceHost 2. CalculatorServiceHost.NET System. ServiceModel 3. CalculatorServiceHost MyServiiceLib 4. CalculatorServiceHost MainWindow. xaml 09 10 11 12 13 14-0114 15 Windows Communication Foundation 5. System.ServiceModel using System.ServiceModel; 6. MainWindow calhost ServiceHost private ServiceHost calhost; 7. Button MainWindow 14-21 CHAPTER 14 WCF WPF 427
14-21 Form1 8. Click CalculatorService ServiceHost private void button1_click(object sender, RoutedEventArgs e) try calhost = new ServiceHost(typeof(MyServiceLib.CalculatorService)); calhost.open(); MessageBox.Show("!"); catch (Exception err) MessageBox.Show("!"); Console.WriteLine(err.ToString()); 9. Click private void button2_click(object sender, RoutedEventArgs e) try calhost.close(); MessageBox.Show("!"); catch (Exception err) 428 Visual C# 2010 UML
MessageBox.Show("!"); Console.WriteLine(err.ToString()); 09 10 10. MyServiceLib App.config CalculatorServiceHost 11. CalculatorServiceHost 12. MyServiceLib 7 13. F5 CalculatorServiceHost MainWindow 8 14. Http http://localhost:1117/wcfsample/ 14-22 CalculatorService 11 12 13 14-0114 15 Windows Communication Foundation 7 WCF Windows 8 Windows 7! Visual Studio Visual Studio CHAPTER 14 WCF WPF 429
14-22 WCF CalculatorService WSDL 9 14-23 9 CalculatorService basichttpbinding.net 1.0 2.0.ASMX 10 430 Visual C# 2010 UML
14-02 09 10 15. 14-23 CalculatorService WSDL WCF 11 12 13 14 15 16. MainWindow 17. Step13 14-22 CalculatorService 10 18. 11 12 Visual Studio 2005 Web.NET 1.0 2.0 CHAPTER 14 WCF WPF 431
14-02 WCF WCF Visual Studio 2010.NET Framework 4.0 14-2-1.NET WCF.NET WCF.NET Framework svcutil.exe WCF svcutil.exe http://localhost:1117/wcfsample/?wsdl 11 Visual Studio 2010 14-24 Visual Studio 2010.NET 12 432 Visual C# 2010 UML
14-02 09 10 14-24 WCF 11 12 13 14 15 Practice 14-2 Practice 14-1 WCF CalculatorService WPF 1. \ Practices\Ex14_02\ServiceHost 2. CalculatorServiceHost.exe 3. MainWindow CHAPTER 14 WCF WPF 433
1. Visual Studio 2010 2. \ Practices\Ex14_02\solution\Practice14 Practice14.sln 1. WCFClientSample 2. http://localhost:1117/wcfsample/ Visual Studio 2010 14-25 14-25 Visual Studio 2010 434 Visual C# 2010 UML
14-02 3. CalculatorService ICalculatorService WCFSample 4. Visual Studio 2010 WCFClientSample.WCFSample CalculatorServiceClient 13 CalculatorServiceClient CalculatorService 14-26 WCFClientSample 14-26 5. ServiceReference app.config app.config WCF WCF 09 10 11 12 13 14 15 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.servicemodel> <bindings> <basichttpbinding> <binding name="basichttpbinding_icalculatorservice" closetimeout="00:01:00" opentimeout="00:01:00" receivetimeout="00:10:00" sendtimeout="00:01:00" allowcookies="false" bypassproxyonlocal="false" hostnamecomparisonmode="strongwildcard" maxbuffersize="65536" maxbufferpoolsize= "524288" maxreceivedmessagesize="65536" messageencoding="text" textencoding="utf-8" transfermode="buffered" usedefaultwebproxy="true"> <readerquotas maxdepth="32" maxstringcontentlength= 13 CalculatorServiceClient CalculatorServiceClient Add Subtract Multiply Divide CHAPTER 14 WCF WPF 435
"8192" maxarraylength="16384" maxbytesperread="4096" maxnametablecharcount="16384" /> <security mode="none"> <transport clientcredentialtype="none" proxycredentialtype="none" realm="" /> <message clientcredentialtype="username" algorithmsuite="default" /> </security> </binding> </basichttpbinding> </bindings> <client> <endpoint address="http://localhost:1117/wcfsample/" binding = "basichttpbinding" bindingconfiguration="basichttpbinding_icalculatorservice" contract="wcfsample.icalculatorservice" name= "Basic-HttpBinding _ICalculatorService" /> </client> </system.servicemodel> </configuration> <client> 6. WCFClientSample MainWindow.xaml 7. Visual Studio 2010 8. TODO: 1. using WCFClientApp.WCFSample; 9. TODO: 2. CalculatorServiceClient proxy = new CalculatorServiceClient(); switch (combobox1.selectedindex) case 0: 436 Visual C# 2010 UML
14-02 result = proxy.add(num1, num2); break; case 1: result = proxy.subtract(num1, num2); break; case 2: result = proxy.multiply(num1, num2); break; case 3: result = proxy.divide(num1, num2); break; 10. F5 WCFClientSample Windows = 14-27 WCF 09 10 11 12 13 14 15 14-27 Practice 14-2 WCF MainWindow CalculatorService WCFClientSample EndpointNotFound 14-2-2 WF WCF WF WCF WF Visual Studio WCF WCF CHAPTER 14 WCF WPF 437