Exception Handling in WCF using Fault Contract
来源:互联网 发布:淘宝优惠券用什么app 编辑:程序博客网 时间:2024/06/05 18:58
Introduction using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; using System.Runtime.Serialization; namespace Indigo { [ServiceContract()] public interface IService { [OperationContract] [FaultContract(typeof(MyFaultException))] string GetMessage(); } using System.Text; using System.Runtime.Serialization; namespace Indigo { [DataContract] public class MyFaultException { private string _reason; [DataMember] public string Reason { get { return _reason; } set { _reason = value; } } } } using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; namespace Indigo { public class Service : IService { #region IService Members public string GetMessage() { try { int i, j, k; j = 1; k = 0; i = j / k; } catch (Exception exp) { MyFaultException theFault = new MyFaultException(); theFault.Reason = "Some Error " + exp.Message.ToString(); throw new FaultException<MyFaultException>(theFault); } return "No Error"; } #endregion } } using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; namespace Indigo { class IndigoHost { internal static ServiceHost myServiceHost = null; static void Main(string[] args) { StartService(); Console.WriteLine("Service at your service"); Console.ReadKey(); StopService(); } internal static void StartService() { myServiceHost = new ServiceHost(typeof(Indigo.Service)); myServiceHost.Open(); } internal static void StopService() { //Call StopService from your shutdown logic (i.e. dispose method) if (myServiceHost.State != CommunicationState.Closed) myServiceHost.Close(); } } } <configuration> <system.serviceModel> <services> <service behaviorConfiguration="MyServiceTypeBehaviors" name="Indigo.Service"> <endpoint address="Service" binding="wsHttpBinding" contract="Indigo.IService" /> <host> <baseAddresses> <add baseAddress="http://localhost:1111/Indigo" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="MyServiceTypeBehaviors"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; namespace Indigo { class Program { static void Main(string[] args) { string result = ""; try { IndigoClient.localhost.IService ww = new IndigoClient.localhost.ServiceClient result = ww.GetMessage(); } catch (FaultException<IndigoClient.localhost.MyFaultException> ee) { result = "Exception: " + ee.Detail.Reason; } Console.WriteLine(result); Console.ReadLine(); } } } <configuration> <system.serviceModel> <bindings> <wsHttpBinding> <binding name="WSHttpBinding_IService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="Message"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" /> </security> </binding> </wsHttpBinding> </bindings> <client> <endpoint address="http://localhost:1111/Indigo/Service" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService" contract="IndigoClient.localhost.IService" name="WSHttpBinding_IService"> <identity> <userPrincipalName value="name@domain.com" /> </identity> </endpoint> </client> </system.serviceModel> </configuration>
In all managed applications, processing errors are represented by Exception objects. In WCF applications, service methods communicate processing error information using SOAP fault messages. SOAP faults are message types that are included in the metadata for a service operation and, therefore, create a fault contract that clients can use to make their operation more interactive. In addition, because SOAP faults are expressed to clients in XML form, they are highly interoperable.
To be more concrete, let us start with an example:
Create an empty solution in VS2005 called "IndigoException". Add one project called "IndigoService". Next add a reference to System.ServiceModel and then add an interface.
}
Add one more class as follows:
using System;
Add one class "Service" and a reference to System.ServiceModel
Build the project.
Now add another project "Host" and add reference to "IndigoService" project and to System.ServiceModel
Add app.config with the following XML:
<?xml version="1.0" encoding="utf-8" ?>
</configuration>
Build the project.Run Host.exe from VS2005 command prompt. You should get the message at the command prompt as follows:
Add another project "IndigoClient" and add System.ServiceModel
Now add service refrence to the service URL (i.e. http://localhost:1111/Indigo)
It will create localhost.cs in service reference.
Add a class Program.cs as follows:
();
Add app.config with following XML
<?xml version="1.0" encoding="utf-8" ?>
Note: Please add your username and domain name under userPrincipalName
Now run the client project; you should get following error message:
You can now see the detailed error message returned from the service.
- Exception Handling in WCF using Fault Contract
- [WCF] Fault Contract
- handling faults in WCF
- Error handling in WCF
- WCF Note3 (Fault and Exception)
- Exception Handling in C#
- Exception Handling in C#
- Exception handling in java
- Exception Handling in Java
- Exception Handling using Enterprise Library
- Exception Handling in Spring MVC
- Exception Handling in Spring MVC
- Exception Handling in Spring MVC
- 如何在WCF进行Exception Handling
- Exception handling with custom error pages in ASP.NET using C#.
- WCF 4 Step By Step Chapter 3 Note (Fault Handling)
- [WCF] Contract
- [WCF] Contract
- c++写入应用程序日志(Event Log )
- android编写Service入门用法与教程
- C++ VS C#(3):switch,类型转换
- CRT堆内存泄露经验1
- 直接初始化 和 复制初始化 的细微差别
- Exception Handling in WCF using Fault Contract
- 在数据库中建立好友表的问题
- 如何在ASP.NET页面中使用异步任务(PageAsyncTask)
- Spring 2.0中的AOP实现(转)
- The State of Web Performance Optimization
- linux下定时器的使用
- unix中将root帐户的权限下放给其他用户
- NTP校时源码(一个教完整的NTP服务项目示例,摘自国嵌实验手册)
- WinForm开发中使用Lable自动换行的问题