For the beginning you have to find an issue, I mean you need to know what happens on server side. You need to handler all error and log them.
Logging errors
public class GlobalErrorHanler: IErrorHandler
{
//to use log4net you have to have a proper configuration in you web/app.config
private static readonly ILog Logger = LogManager.GetLogger(typeof (GlobalErrorHandler));
public bool HandleError(Exception error)
{
//if you host your app on IIS you have to log using log4net for example
Logger.Error("Error occurred on the service side", error);
//Console.WriteLine(error.Message);
//Console.WriteLine(error.StackTrace);
return false;
}
public void ProvideFault(Exception error, System.ServiceModel.Channels.MessageVersion version, ref System.ServiceModel.Channels.Message fault)
{
//you can provide you fault exception here
}
}
Then service behavior (inherits Attribute to add possibility to use it as an attribute on service implementation):
public class MyErrorHandlingBehavior : Attribute, IServiceBehavior
{
public void AddBindingParameters(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
return;
}
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
foreach (ChannelDispatcher disp in serviceHostBase.ChannelDispatchers)
disp.ErrorHandlers.Add(new GlobalErrorHanler());
}
public void Validate(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{ }
}
And extension element to use it in your config:
public class ErrorHandlerExtention: BehaviorExtensionElement
{
public override Type BehaviorType
{
get { return typeof(MyErrorHandlingBehavior); }
}
protected override object CreateBehavior()
{
return new MyErrorHandlingBehavior();
}
}
Then add to config file:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<!-- Extension.ErrorHandlerExtention: fully qualified class name, ArrayList: assebmly name-->
<add name="errorHandler" type="Extension.ErrorHandlerExtention, Extensions"/>
</behaviorExtensions>
</extensions>
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="False"/>
<!-- the name of this element must be the same as in the section behaviorExtensions -->
<errorHandler />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
This will allow you to get an error. When you have an error get back to the forum.
Some more posts with this technique: Error 1, Error 2
Tracing:
To turn on tracing you have to add such lines to a config:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="log"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "C:\traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
Tracing tool: Trace Viewer