private void FaultExceptionValidation(string faultType, Exception e) { switch (faultType) { case "somefault": Assert.NotNull(e); Assert.IsType <System.ServiceModel.FaultException <ClientContract.SomeFault> >(e); var ex = (System.ServiceModel.FaultException <ClientContract.SomeFault>)e; ClientContract.SomeFault sf = ex.Detail; Assert.Equal(123456789, sf.ID); Assert.Equal("SomeFault", sf.message); break; case "outerfault": Assert.NotNull(e); Assert.IsType <System.ServiceModel.FaultException <ClientContract.OuterFault> >(e); var oex = (System.ServiceModel.FaultException <ClientContract.OuterFault>)e; ClientContract.OuterFault of = oex.Detail; sf = of.InnerFault; Assert.Equal(123456789, sf.ID); Assert.Equal("SomeFault as innerfault", sf.message); break; case "complexfault": string exp = "50:This is a test error string for fault tests.:123456789:SomeFault in complexfault:0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127:2147483647-214748364801-150-50:123456789:SomeFault in complexfaultnull234:Second somefault in complexfault"; Assert.NotNull(e); Assert.IsType <System.ServiceModel.FaultException <ClientContract.ComplexFault> >(e); var cex = (System.ServiceModel.FaultException <ClientContract.ComplexFault>)e; Assert.Equal(exp, ComplexFaultToString(cex.Detail)); break; default: break; } }
public void DatacontractFaults(string f) { var host = ServiceHelper.CreateWebHostBuilder <Startup>(_output).Build(); using (host) { host.Start(); var httpBinding = ClientHelper.GetBufferedModeBinding(); var factory = new System.ServiceModel.ChannelFactory <ClientContract.ITestDataContractFault>(httpBinding, new System.ServiceModel.EndpointAddress(new Uri("http://localhost:8080/BasicWcfService/DatacontractFaults.svc"))); var channel = factory.CreateChannel(); var factory2 = new System.ServiceModel.ChannelFactory <ClientContract.ITestDataContractFaultTypedClient>(httpBinding, new System.ServiceModel.EndpointAddress(new Uri("http://localhost:8080/BasicWcfService/DatacontractFaults.svc"))); var channel2 = factory2.CreateChannel(); //test variations int count = 9; try { channel.TwoWayVoid_Method(f); } catch (Exception e) { count--; FaultExceptionValidation(f, e); } try { string s = channel.TwoWay_Method(f); } catch (Exception e) { count--; FaultExceptionValidation(f, e); } try { Stream inputStream = new MemoryStream(); byte[] bytes = Encoding.UTF8.GetBytes(f.ToCharArray()); foreach (byte b in bytes) { inputStream.WriteByte(b); } inputStream.Position = 0; Stream outputStream = channel.TwoWayStream_Method(inputStream); StreamReader sr = new StreamReader(outputStream, Encoding.UTF8); string outputText = sr.ReadToEnd(); Assert.False(true, $"Error, Received Input: {outputText}"); } catch (Exception e) { count--; FaultExceptionValidation(f, e); } try { string response = channel.TwoWayAsync_Method(f).GetAwaiter().GetResult(); Assert.False(true, $"Error, Client received: {response}"); } catch (Exception e) { count--; FaultExceptionValidation(f, e); } try { var fmc = new ClientContract.FaultMsgContract(); fmc.ID = 123; fmc.Name = f; ClientContract.FaultMsgContract fmcResult = channel.MessageContract_Method(fmc); Assert.False(true, $"Error, Client received: {fmcResult.Name}"); } catch (Exception e) { count--; FaultExceptionValidation(f, e); } System.ServiceModel.Channels.Message msgOut = System.ServiceModel.Channels.Message.CreateMessage(System.ServiceModel.Channels.MessageVersion.Soap11, "http://tempuri.org/ITestDataContractFault/Untyped_Method", f); System.ServiceModel.Channels.Message msgIn = channel.Untyped_Method(msgOut); if (msgIn.IsFault) { System.ServiceModel.Channels.MessageFault mf = System.ServiceModel.Channels.MessageFault.CreateFault(msgIn, int.MaxValue); switch (f.ToLower()) { case "somefault": count--; ClientContract.SomeFault sf = mf.GetDetail <ClientContract.SomeFault>(); Assert.Equal(123456789, sf.ID); Assert.Equal("SomeFault", sf.message); break; case "outerfault": count--; ClientContract.OuterFault of = mf.GetDetail <ClientContract.OuterFault>(); sf = of.InnerFault; Assert.Equal(123456789, sf.ID); Assert.Equal("SomeFault as innerfault", sf.message); break; case "complexfault": count--; ClientContract.ComplexFault cf = mf.GetDetail <ClientContract.ComplexFault>(); string exp = "50:This is a test error string for fault tests.:123456789:SomeFault in complexfault:0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127:2147483647-214748364801-150-50:123456789:SomeFault in complexfaultnull234:Second somefault in complexfault"; Assert.Equal(exp, ComplexFaultToString(cf)); break; default: break; } } msgOut = System.ServiceModel.Channels.Message.CreateMessage(System.ServiceModel.Channels.MessageVersion.Soap11, "http://tempuri.org/ITestDataContractFault/Untyped_MethodReturns", f); msgIn = channel.Untyped_MethodReturns(msgOut); if (msgIn.IsFault) { System.ServiceModel.Channels.MessageFault mf = System.ServiceModel.Channels.MessageFault.CreateFault(msgIn, int.MaxValue); switch (f) { case "somefault": count--; ClientContract.SomeFault sf = mf.GetDetail <ClientContract.SomeFault>(); Assert.Equal(123456789, sf.ID); Assert.Equal("SomeFault", sf.message); break; case "outerfault": count--; ClientContract.OuterFault of = mf.GetDetail <ClientContract.OuterFault>(); sf = of.InnerFault; Assert.Equal(123456789, sf.ID); Assert.Equal("SomeFault as innerfault", sf.message); break; case "complexfault": count--; ClientContract.ComplexFault cf = mf.GetDetail <ClientContract.ComplexFault>(); string exp = "50:This is a test error string for fault tests.:123456789:SomeFault in complexfault:0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127:2147483647-214748364801-150-50:123456789:SomeFault in complexfaultnull234:Second somefault in complexfault"; Assert.Equal(exp, ComplexFaultToString(cf)); break; default: break; } } try { string response = channel2.Untyped_Method(f); } catch (Exception e) { count--; FaultExceptionValidation(f, e); } try { string response = channel2.Untyped_MethodReturns(f); } catch (Exception e) { count--; FaultExceptionValidation(f, e); } Assert.Equal(0, count); } }