I ran into the same problems with breaking out the popupControlExtender's DynamicServiceMethod into its own webservice .vb file, and this is what I did to fix them...
First in my webservice I added the following line to the CLASS as described in the article above...
<System.Web.Script.Services.ScriptService()>
Next, I removed the junk from the GetDynamicContent method. VisualStudio puts this stuff in the file when that method is automatically created within the page...
<System.Web.Services.WebMethod()> _
<System.Web.Script.Services.ScriptMethod()>
I simply changed it to...
<WebMethod()>
If you want session state to be available, do this instead...
<WebMethod(EnableSession:=True, BufferResponse:=True, CacheDuration:=0)>
Then, I removed 'Shared' from the method so it was no longer a Shared method.
Because my webservices are in a different subfolder than my main project called 'webservices' I added this to my DynamicServicePath property. I think one important thing to note here is that this path must include the name of the asmx file AND include the extension. Mine looks like this...
DynamicServicePath="/WebServices/DynamicImageService.asmx"
Then, we make our DynamicServiceMethod equal to the actual method name...
DynamicServiceMethod="GetDynamicContent"
Some articles tell you to make sure this isn't in your web.config
<remove verb="*" path="*.asmx"/>
I found this to be a bogus request, because it appears later in the config enabling it for scripting. Mine worked fine as so...
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
I hope this helps you in your situation above. It sounds like you have a very similar problem.