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)



Reply via email to