I'm actually sending and receiving SOAP XML directly to Zenfolio (am not generating any classes from WSDL).
I got round the first problem I was having by hard coding the root group ID, but when traversing photo sets upon sending the following SOAP body...
<LoadPhotoSet xmlns="http://www.zenfolio.com/api">
<photosetId>XXXXXXXXX</photosetId>
</LoadPhotoSet>
...where XXXXXXXXX is a valid photo set, I get the following XML sent back to me...
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<soap:Fault>
<faultcode>
<#text>soap:Server</#text>
</faultcode>
<faultstring>
<#text>Server was unable to process request. ---> There was an error generating the XML document. ---> Instance validation error: '278503' is not a valid value for Zenfolio.Web.Api.V1_0.ApiAccessMask.</#text>
</faultstring>
<detail></detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Do I need to change the xmlns attribute of <LoadPhotoSet xmlns="http://www.zenfolio.com/api"> to point to a specific API version, eg.
<LoadPhotoSet xmlns="http://www.zenfolio.com/api/1.0">
The strange thing is that other LoadPhotoSet requests send prior to the problematic one seem to work OK (in the same program execution)