No configuration Wcf host and client
Using Exception in Wcf should be very caucious, as I blogged before, wcf exception should be marked as Serializable, and implement all 4 ctor from base exception class. An unit-test for each exception might be overkill, but it’s worth to try.
In-proc wcf host is neat for this purpose, by using channel Factory, client side doesn’t need configuration either.
[TestFixture]
public class MyDataNotFoundExceptionSpecs
{
private readonly ServiceHost _host;
private const string _url = "net.tcp://localhost:9000/TestException";
public MyDataNotFoundExceptionSpecs()
{
_host = new ServiceHost(typeof(TestService));
_host.AddServiceEndpoint(typeof(ITestService),
new NetTcpBinding(), _url);
_host.Open();
Console.WriteLine("wcf service started.");
}
~MyDataNotFoundExceptionSpecs()
{
_host.Close();
}
private ChannelFactory<ITestService> channelFactory;
[SetUp]
public void SetupChannelFacotry()
{
channelFactory = new ChannelFactory<ITestService>(
new NetTcpBinding(),
new EndpointAddress(_url));
}
[TearDown]
public void CleanUpChannelFacotry()
{
channelFactory.Abort();
}
[Test]
[ExpectedException(typeof(FaultException<MyDataNotFoundException>))]
public void should_passed_to_client()
{
ITestService proxy = channelFactory.CreateChannel();
proxy.Ping("Frank");
}
}
public class TestService : ITestService
{
public void Ping(string user)
{
throw new FaultException<MyDataNotFoundException>(new MyDataNotFoundException());
}
}
[ServiceContract]
public interface ITestService
{
[OperationContract]
[FaultContract(typeof(MyDataNotFoundException))]
void Ping(string user);
}