<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Elegant Code &#187; WCF</title>
	<atom:link href="http://elegantcode.com/category/wcf/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com</link>
	<description></description>
	<lastBuildDate>Tue, 15 May 2012 10:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Integrating ELMAH for a WCF Service</title>
	<atom:link href="http://elegantcode.com/category/wcf/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com</link>
	<description></description>
	<lastBuildDate>Tue, 15 May 2012 10:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Elegant Code &#187; WCF</title>
	<atom:link href="http://elegantcode.com/category/wcf/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com</link>
	<description></description>
	<lastBuildDate>Tue, 15 May 2012 10:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Integrating ELMAH for a WCF Service</title>
		<link>http://elegantcode.com/2010/02/05/integrating-elmah-for-a-wcf-service/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=integrating-elmah-for-a-wcf-service</link>
		<comments>http://elegantcode.com/2010/02/05/integrating-elmah-for-a-wcf-service/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 20:57:08 +0000</pubDate>
		<dc:creator>Jan Van Ryswyck</dc:creator>
				<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2010/02/05/integrating-elmah-for-a-wcf-service/</guid>
		<description><![CDATA[Peter Cosemans, who is one of my colleagues, found a nice way to integrate ELMAH for a WCF service. ELMAH is an error logging facility for logging unhandled exceptions particularly focused on ASP.NET web applications. There are plenty of sources out there, like this blog post by Scott Hanselman, that describe how to get ELMAH [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/cosemansp">Peter Cosemans</a>, who is one of my colleagues, found a nice way to integrate <a href="http://code.google.com/p/elmah/">ELMAH</a> for a WCF service. ELMAH is an error logging facility for logging unhandled exceptions particularly focused on ASP.NET web applications. There are plenty of sources out there, like <a href="http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx">this blog post</a> by Scott Hanselman, that describe how to get ELMAH up and running for an ASP.NET web application.</p>  <p>In order to get it working for WCF, you need to provide a custom error handler by implementing the <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx">IErrorHandler</a> interface:</p>  <pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> ElmahErrorHandler : IErrorHandler
{
    <span class="kwrd">public</span> <span class="kwrd">void</span> ProvideFault(Exception error, MessageVersion version, 
                             <span class="kwrd">ref</span> Message fault)
    {
        var dummyRequest = 
            <span class="kwrd">new</span> SimpleWorkerRequest(<span class="str">&quot;dummy&quot;</span>, <span class="str">&quot;&quot;</span>, <span class="kwrd">new</span> StringWriter());
        var context = <span class="kwrd">new</span> HttpContext(dummyRequest);
        
        var elmahLogger = Elmah.ErrorLog.GetDefault(context);
        elmahLogger.Log(<span class="kwrd">new</span> Elmah.Error(error));    
    }

    <span class="kwrd">public</span> Boolean HandleError(Exception error)
    {
        SDExceptionHandler.DoHandle(error);
        <span class="kwrd">return</span> <span class="kwrd">true</span>;
    }
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>&#160;</p>

<p>This error handler needs to be added to the stack of error handlers. You can do this in a couple of ways, for example by providing a custom attribute that implements <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.description.iservicebehavior.aspx">IServiceBehavior</a> and then applying this attribute to your service class.</p>

<p>Next you need to add some configuration to your web.config and your all good to go:</p>

<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">system.web</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">httpHandlers</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">verb</span><span class="kwrd">=&quot;POST,GET,HEAD&quot;</span> 
             <span class="attr">path</span><span class="kwrd">=&quot;MyService.Elmah.axd&quot;</span> 
             <span class="attr">type</span><span class="kwrd">=&quot;Elmah.ErrorLogPageFactory, Elmah&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">httpHandlers</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">system.web</span><span class="kwrd">&gt;</span>

<span class="kwrd">&lt;</span><span class="html">elmah</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">errorLog</span> <span class="attr">type</span><span class="kwrd">=&quot;Elmah.XmlFileErrorLog, Elmah&quot;</span> 
              <span class="attr">logPath</span><span class="kwrd">=&quot;C:\MyServiceLog\&quot;</span><span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">elmah</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>

<p>&#160;</p>

<p>What’s nice about this approach is that you don’t need to run the WCF service in ASP.NET compatibility mode, which is a major bonus.</p>

<p>Hope this helps</p>]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2010/02/05/integrating-elmah-for-a-wcf-service/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

