Hi Bryan, > OK.. I was able to get it to work with some configurations. Here is a > writeup on what I had to do: > > http://kearneyville.com/2009/03/13/connecting-jboss-web-service-with-a-wcf-client/
So you can force WCF to revert to WS-A version 2004/08 with the messageVersion="Soap11WSAddressingAugust2004" attribute in the config? Well that's good to know, thanks! > I am still getting an occasional error, however. Have you seen anything > like this: > ... > > Unhandled Exception: System.ServiceModel.ProtocolException: The remote > endpoint failed to include a required SequenceAck > nowledgement header on a reliable reply message. The reliable session > was faulted. This smells like a mismatch in terms of the acknowledgement frequency of the CXF RM layer versus the expectation in the WCF client. One possibility is that you just need to tweak the configuration. For example, you can force CXF to send the ACKs sooner by adding a <wsrm-policy:AcknowledgementInterval Milliseconds="N"/> child element to the <wsrmp:RMAssertion> assertion in your jboss-cxf.xml, where N is some number less than the default 2000. Conversely, increase the retransmission interval on the WCF side, or the inactivity timeout by up'ing the inactivityTimeout attribute on <reliableSession> from the current "00:15:00" in your client-side app.config. Another more serious possibility is that deferred ACKs are not sendable from the CXF side. This would be the case if the client-side acksTo was set to anonymous. I assume though that the WCF <reliableSession> in your custom binding is sufficient for this non-anonymous asksTo endpoint to be created implicitly? Or maybe you have to explicitly configure a <compositeDuplex/> element in your custom binding to make this happen, as in this MSDN example: http://msdn.microsoft.com/en-us/library/ms731302.aspx Either way, it would be useful to have a snoop at the message flow to check that the client-side acksTo is non-anonymous, and whether spurious resends are occurring before ACKs are sent etc. For this sort of thing, I usually just fire up tcpmon. Cheers, Eoghan -----Original Message----- From: Bryan Kearney [mailto:[email protected]] Sent: Fri 13/03/2009 13:58 To: Eoghan Glynn Cc: [email protected]; Daniel Kulp; Wolf, Chris (IDEAS) Subject: Re: WS-Security interop with WCF Eoghan Glynn wrote: > > > I want to dig into the stack trace I am seeing > > onthe server side before I answer that. It could be that the stack trace > > is causing the response message to be garbled. > > Well the NPE in VersionTransformer.convert() is related to the version > mismatch. > > The CXF RM layer wants to unmarshall an incoming CreateSequence message > containing an AcksTo element, which itself contains a > wsa:EndpointReferenceType where the wsa namespace of the 2004/08 variety. > > Whereas the WCF client is sending a CreateSequence conatining an AcksTo > of the 2005/08 vintage. > > OK.. I was able to get it to work with some configurations. Here is a writeup on what I had to do: http://kearneyville.com/2009/03/13/connecting-jboss-web-service-with-a-wcf-client/ I am still getting an occasional error, however. Have you seen anything like this: C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\ConsoleApplication1\ConsoleApplication1 \bin\Debug>ConsoleApplication1.exe Unhandled Exception: System.ServiceModel.ProtocolException: The remote endpoint failed to include a required SequenceAck nowledgement header on a reliable reply message. The reliable session was faulted. Server stack trace: at System.ServiceModel.Channels.ReliableRequestSessionChannel.SyncRequest.WaitForReply(TimeSpan timeout) at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, O bject[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, O bject[] ins, Object[] outs) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntim e operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
