public void TestSayFaultHello()
{
String name = "Anonymous";
Trace actual = null;
TraceManager.OnTrace += t => actual = t;
Uri baseAddress = new Uri("http://localhost:12345/hello");
var factory = new ChannelFactory<IHelloWorldService>(new BasicHttpBinding(), new EndpointAddress(baseAddress));
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseAddress);
foreach (var endpoint in host.Description.Endpoints)
{
endpoint.Behaviors.Add(new TraceEndpointBehavior());
}
host.Open();
var channel = factory.CreateChannel();
try
{
channel.SayFaultHello(name);
}
catch
{
((IDisposable)channel).Dispose();
}
host.Close();
}
Assert.IsNotNull(actual);
Assert.IsNotNull(actual.Entries);
Assert.AreEqual(0, actual.Entries.Count);
Assert.IsTrue(actual.Properties.ContainsKey(SDBTraceProperties.TRACE_SUCCESS_PROPERTY));
Assert.IsFalse((bool)actual.Properties[SDBTraceProperties.TRACE_SUCCESS_PROPERTY]);
Assert.IsTrue(actual.Properties.ContainsKey(SDBTraceProperties.TRACE_RESULT_PROPERTY));
var envelope = XElement.Parse((String)actual.Properties[SDBTraceProperties.TRACE_RESULT_PROPERTY]);
Assert.IsNotNull(envelope);
var body = envelope.Element("{http://schemas.xmlsoap.org/soap/envelope/}Body");
Assert.IsNotNull(body);
var fault = body.Element("{http://schemas.xmlsoap.org/soap/envelope/}Fault");
Assert.IsNotNull(fault);
var faultstring = fault.Element("faultstring");
Assert.IsNotNull(faultstring);
Assert.AreEqual("Hello, Anonymous", faultstring.Value);
}
}