#眉標=VS2008、WCF、SOA #副標=體驗新一代整合開發環境(7) #大標=WCF如何協助企業發展SOA資訊系統? #作者=文/圖 王寧疆 ===<反灰>============= [ServiceContract] public interface IService { [OperationContract] double GetStockPrice(int StockNo); } ================ ===<反灰>============= public class Service : IService //實作IService介面的類別 { public double GetStockPrice(int StockNo) //實作查詢股價的服務 { Random r = new Random(); //建立Random類別的物件 return r.NextDouble() * r.Next(1,101); //利用亂數模擬股價的變化 } } ================ ===<反灰>============= [DataContract()] public class SalesData { private decimal m_CategorySales; //儲存屬性內容值的變數 [DataMember()] //宣告屬性為交換資料的一部分 public decimal CategorySales //定義屬性 { get { return m_CategorySales;} //傳回屬性的內容值 set { m_CategorySales = value;} //設定屬性的內容值 } } ================ ===<反灰>============= [MessageContract] public class PatientRecord { [MessageHeader(ProtectionLevel=None)] public int recordID; //宣告不保護 [MessageHeader(ProtectionLevel=Sign)] public string patientName; //宣告加上簽章保護 [MessageHeader(ProtectionLevel=EncryptAndSign)] public string SSN;//宣告加上簽章和加密 [MessageBodyMember(ProtectionLevel=None)] public string comments;//宣告不保護 [MessageBodyMember(ProtectionLevel=Sign)] public string diagnosis; //宣告要加上簽章 [MessageBodyMember(ProtectionLevel=EncryptAndSign)] public string medicalHistory; //宣告加上簽章和加密 } ================ ===<反灰>============= [OperationContract] BankingTransactionResponse Process(BankingTransaction bt); [OperationContract] void Store(BankingTransaction bt); [OperationContract] BankingTransactionResponse GetResponse(); ================ ===<反灰>============= [OperationContract] bool Validate(BankingTransaction bt); //傳回值型態非MessageContract定義的型態 [OperationContract] void Reconcile(BankingTransaction bt1, BankingTransaction bt2); //參數超過一個 ================ ===<反灰>============= [ServiceContract] public interface IService { [OperationContract] [FaultContract(typeof(MyFaultException))] double GetStockPrice(int StockNo); } ================ ===<反灰>============= public class Service : IService { public double GetStockPrice(int StockNo) //查詢股價的服務 { Random r = new Random(); try { //執行服務 } catch (Exception exp) { MyFaultException theFault = new MyFaultException("例外原因"); //建立例外類別的物件 throw new FaultException(theFault); //引發例外 } return r.NextDouble() * r.Next(1,101); //利用亂數模擬股價的變化 } } ================ ===<反灰>============= ================ ===<反灰>============= try { ServiceClient ww = new ServiceClient(); double result = ww.GetStockPrice(); //呼叫功能 } catch (FaultException ee) //處理引發的例外 { result = "Exception: " + ee.Message; } ================ ===<反灰>============= [ServiceBehavior(TransactionAutoCompleteOnSessionClose=true, TransactionIsolationLevel=IsolationLevel.ReadCommitted, TransactionTimeout="00:00:30")] public class ServiceClass : IServiceClass { [OperationBehavior] string IServiceClass.GetText() { StreamReader sw = new StreamReader(@"c:\temp\WCFServiceTest.txt"); return sw.ReadLine(); } } ================ ===<反灰>============= [OperationBehavior(TransactionAutoComplete=true, TransactionScopeRequired=true)] string IServiceClass.GetText() { StreamReader sw = new StreamReader(@"c:\wrox\WCFServiceTest.txt"); return sw.ReadLine(); } ================ ===<反灰>============= [TransactionFlow(TransactionFlowOption.Mandatory)] int IServiceClass.MultiplyNumbers(int firstvalue, int secondvalue) { return firstvalue * secondvalue; } ================ ===<反灰>============= ================ ===<反灰>============= HttpTransportBindingElement httpTransport = new HttpTransportBindingElement(); //使用HTTP繫結物件 TextMessageEncodingBindingElement textMessageEncoding = new TextMessageEncodingBindingElement(); //建立物件 textMessageEncoding.Encoding = System.Text.Encoding.UTF8; //指定文字編碼 textMessageEncoding.MessageVersion = MessageVersion.Default; //預設訊息版本 ReliableSessionBindingElement reliableSession = new ReliableSessionBindingElement(); //建立物件 reliableSession.Ordered = true; /訊息傳遞順序檢察 CustomBinding reliableHttpBinding = new CustomBinding( reliableSession, textMessageEncoding, httpTransport); //自訂繫結物件 ================ ===<反灰>============= [DeliveryRequirements(RequireOrderedDelivery=true)] public class FinancingPackageBuilder : IFinancingPackageBuilder ================ ===<反灰>============= ================ ===<反灰>============= ================ ===<反灰>============= ================