HttpWebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
HttpWebRequest.RegisterPrefix("http://xxxx.com", WebRequestCreator.ClientHttp);
[ServiceContract]
public interface IService1
{
[OperationContract]
[FaultContract(typeof(ValidationException))]
string getData();
}
[DataContract]
public class MyDataContract
{
[DataMember]
[StringLength(10, ErrorMessage="String length should not be greater than 10")]
public string Name { get; set; }
}
public class Service1 : IService1
{
public string getData()
{
MyDataContract dc = new MyDataContract();
dc.Name = "12345678901"; // string length greater than 10
return dc.Name;
}
}
public class SilverlightFaultContractBehavior : BehaviorExtensionElement, IEndpointBehavior
{
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
SilverlightFaultMessageInspector faultnspector = new SilverlightFaultMessageInspector();
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(faultnspector);
}
public class SilverlightFaultMessageInspector : IDispatchMessageInspector
{
public void BeforeSendReply(ref Message reply, object correlationState)
{
if (reply.IsFault)
{
HttpResponseMessageProperty property = new HttpResponseMessageProperty();
// Here the response code is changed to 200.
property.StatusCode = System.Net.HttpStatusCode.OK;
reply.Properties[HttpResponseMessageProperty.Name] = property;
}
}
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
// Dont do anything to incoming request.
return null;
}
}
// The following methods are not relevant. So doing dummy implementation of IEndpointBehavior interface
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
public override System.Type BehaviorType
{
get { return typeof(SilverlightFaultContractBehavior); }
}
protected override object CreateBehavior()
{
return new SilverlightFaultContractBehavior();
}
}
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="silverlightFaults"
type="SilverlightApplication1.Lib.SilverlightFaultContractBehavior,
SilverlightFaultContractBehavior,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
<behaviors>
<endpointBehaviors>
<behavior name="SilverlightFaultBehavior">
<silverlightFaults/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="SilverlightApplication1.Web.Service1">
<endpoint address=""
binding="basicHttpBinding"
contract="SilverlightApplication1.Web.IService1"
behaviorConfiguration="SilverlightFaultBehavior" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="True" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
SilverlightApplication1.ServiceReference1.Service1Client client = new SilverlightApplication1.ServiceReference1.Service1Client();
client.getDataCompleted += new EventHandler<getDataCompletedEventArgs>(client_getDataCompleted);
client.getDataAsync();
void client_getDataCompleted(object sender, getDataCompletedEventArgs e)
{
if (e.Error != null)
{
if (e.Error is FaultException)
{
MessageBox.Show(e.Error.Message);
}
}
}
Have a question about something in this article? You can receive help directly from the article author. Sign up for a free trial to get started.
Comments (0)