RE: Asynchronous Web Service Method Failure

From: Turbo (Turbo_at_discussions.microsoft.com)
Date: 12/21/04


Date: Tue, 21 Dec 2004 12:27:01 -0800

I'm calling the Endxxx method just once from the callback procedure. It
fails on both the Proxy.Beginxxx call and on the Proxy.xxx call. The message
box only occurs when I start the app from VS.NET. It is the same message box
that pops up if the proxy can't reconcile the web method parameters. The
message says "Error occured during async processing." If I browse to the
page, like an end user would do, it simply hangs up IE.

 I am using the non blocking web method call from the proxy, not starting a
separate thread in the middle of my web method procedure.

Blobs were an option that I considered, and I will revisit that.

 I use the "report cache" folder because it allowed me to be very specific
in the security settings without messing around in the c:\inetpub\wwwroot
folder and it allows me to have multiple apps share the report cache folder.
Also, I cannot return a .pdf document object from a web service method
because the proxy cannot serialize it. I'm using the CETE Dynamic PDF
Generator.

Once again, I very much appreciate your help in this matter.

"Dan Rogers" wrote:

> Here's the part that confuses me. You aren't calling the Endxxx method
> more than once are you? That call would normally be made by the event
> handler that you specify when you call the Beginxxx method. So you
> shouldn't call it on your own to check progress, as the thread would be in
> the wrong state. Also, you call that from the client side, not the server
> side, yes?
>
> The way you describe this topology just seems out of wack with how it works
> in my mind. The message box has to be happening on the client side, yes?
> On the server side, it's not a background thread any more than any other
> IIS thread is (I mean to say, they are all background threads). If you
> call the web service from a standard "add-web-reference" proxy and don't
> call the beginXX methods on the proxy, does the error occur? Does the file
> get written? Again, I'm not sure yet if we're talking about making a call
> thru a proxy and using the proxy side "non-blocking call" behavior, or if
> you are using server side async implementation (which is another matter
> entirely!).
>
> In general, writing a file outside of the current vroot is going to cause
> problems. You just don't have the right permissions by default - have you
> thought about writing your file to a database as a blob? This would
> eliminate the sandbox issues from the equation. In general writing to disk
> is bad juju, and the IIS worker thread is given very restricted permissions
> as far as directly accessing system resources such as the local disk.
>
>
> --------------------
> >Thread-Topic: Asynchronous Web Service Method Failure
> >thread-index: AcTnd7LM+hDENbb1So2lC3FcKjjToA==
> >X-WBNR-Posting-Host: 65.118.1.233
> >From: "=?Utf-8?B?VHVyYm8=?=" <Turbo@discussions.microsoft.com>
> >References: <4F6A0DC8-92A1-4BB9-9E07-43123A799944@microsoft.com>
> <00lXKSV4EHA.3388@cpmsftngxa10.phx.gbl>
> <E3D1275E-5CE8-4DCE-8145-0BAA1A0BE8EB@microsoft.com>
> <DUddYT64EHA.1964@cpmsftngxa10.phx.gbl>
> <79A48C7F-F977-4764-9037-78B1ECE7565B@microsoft.com>
> <fiOsdAv5EHA.2680@cpmsftngxa10.phx.gbl>
> >Subject: RE: Asynchronous Web Service Method Failure
> >Date: Tue, 21 Dec 2004 08:11:16 -0800
> >Lines: 238
> >Message-ID: <BDBC174C-B0EA-45A9-9699-4EAB74E1739D@microsoft.com>
> >MIME-Version: 1.0
> >Content-Type: text/plain;
> > charset="Utf-8"
> >Content-Transfer-Encoding: 7bit
> >X-Newsreader: Microsoft CDO for Windows 2000
> >Content-Class: urn:content-classes:message
> >Importance: normal
> >Priority: normal
> >X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
> >Newsgroups: microsoft.public.dotnet.framework.aspnet.webservices
> >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
> >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA03.phx.gbl
> >Xref: cpmsftngxa10.phx.gbl
> microsoft.public.dotnet.framework.aspnet.webservices:27327
> >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservices
> >
> >You're probably right, and it's something I should have thought of myself.
>
> >Here are the steps involved:
> >
> >When a session begins, I create a folder for that session in a virtual
> >directory that is set up for that and nothing else. Let's call it the
> >application file cache. It is not in the c:\inetpub\wwwroot folder. The
> >resulting folder looks like \application file caches\sessionid\ so each
> >session has a temporary disk space where the reports are created. This
> >folder is removed when the session ends.
> >
> >When the user requests a report, sometimes a stream is opened to load some
> >xml that I would need for the report. To open a stream, I use
> >server.mappath(\application root\subfolder\textfilename).
> >
> >When the report is completed, a file is created in his/her specific
> session
> >folder using server.mappath(\application file caches\sessionid\filename)
> and
> >the URL of the file is returned by the web service method. If I use a
> >streamwriter, the method fails. The error is generated when I try to make
> >the call to EndCreateReport(IAsyncResult) and this is where the message
> box
> >comes up. The real rub is that I don't know if the error occurs when
> opening
> >the streams, reading from them, or writing to them. The error is not
> caught
> >in the Try/Catch block.
> >
> >Anyway, I'll look at the security thing.
> >
> >"Dan Rogers" wrote:
> >
> >> This could be a security issue. Because the request is originating thru
> >> the web service (asp.net), the permissions granted to the thread are
> indeed
> >> sandboxed. If you are calling the class dirctly, you are not
> encountering
> >> the sand box. Have you tried treating this as a permissions thing? For
> >> instance, if you only try to write to the services directory, and not to
> a
> >> root qualified path, do you have better luck? I should have thought of
> >> this possibility since it is such a common case.
> >>
> >> If you try to over-write an existing file in the local service
> directory,
> >> and you've explicitely granted permissions to the ASPNET_IIS web service
> >> account to that file, does it work any better? WS that write files are
> >> indeed problematic because they are so tightly sand boxed. If you think
> >> about it, the potential under high load to knock your server over when
> the
> >> disk is full is extremely likely. A common attack scenario involves web
> >> exposed calls that save files.
> >>
> >> Dan
> >> --------------------
> >> >Thread-Topic: Asynchronous Web Service Method Failure
> >> >thread-index: AcTkUwPdMeARkT8bTT+WHDnZWsK+gg==
> >> >X-WBNR-Posting-Host: 65.118.1.233
> >> >From: "=?Utf-8?B?VHVyYm8=?=" <Turbo@discussions.microsoft.com>
> >> >References: <4F6A0DC8-92A1-4BB9-9E07-43123A799944@microsoft.com>
> >> <00lXKSV4EHA.3388@cpmsftngxa10.phx.gbl>
> >> <E3D1275E-5CE8-4DCE-8145-0BAA1A0BE8EB@microsoft.com>
> >> <DUddYT64EHA.1964@cpmsftngxa10.phx.gbl>
> >> >Subject: RE: Asynchronous Web Service Method Failure
> >> >Date: Fri, 17 Dec 2004 08:11:07 -0800
> >> >Lines: 143
> >> >Message-ID: <79A48C7F-F977-4764-9037-78B1ECE7565B@microsoft.com>
> >> >MIME-Version: 1.0
> >> >Content-Type: text/plain;
> >> > charset="Utf-8"
> >> >Content-Transfer-Encoding: 7bit
> >> >X-Newsreader: Microsoft CDO for Windows 2000
> >> >Content-Class: urn:content-classes:message
> >> >Importance: normal
> >> >Priority: normal
> >> >X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
> >> >Newsgroups: microsoft.public.dotnet.framework.aspnet.webservices
> >> >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
> >> >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA03.phx.gbl
> >> >Xref: cpmsftngxa10.phx.gbl
> >> microsoft.public.dotnet.framework.aspnet.webservices:27277
> >> >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservices
> >> >
> >> >In clarification of my previous post, I have found that I cannot call
> web
> >> >service methods through a proxy if the method opens a stream reader or
> >> stream
> >> >writer. If I call the CreateReport method using the proxy, it will
> >> timeout.
> >> >If I call the BeginCreateReport method, it fails when attempting the
> use
> >> the
> >> >stream. The only way I can get the method to run successfully is to
> >> create
> >> >an instance of the web service directly, without using a proxy.
> >> >
> >> >"Dan Rogers" wrote:
> >> >
> >> >> I'm still confused about what you mean by async. How are you
> invoking
> >> them
> >> >> a) when it works, and b) when it doesn't work. Since you are
> returning
> >> >> values to the caller, I am pretty sure that these are not async
> server
> >> side
> >> >> operations, but you are referring to the non-blocking (beginMethodXX)
> on
> >> >> the caller side as "async".
> >> >>
> >> >> is this the case? If so, there is no difference in the way the call
> is
> >> >> dispatched and handled on the server side - so again, my confusion as
> to
> >> >> why the stream reader thinks the thread is async.
> >> >>
> >> >> Something in the description here (topology - e.g. what code are you
> >> trying
> >> >> to invoke on what side of a web service method call) is eluding me.
> >> >>
> >> >> Dan
> >> >> --------------------
> >> >> >Thread-Topic: Asynchronous Web Service Method Failure
> >> >> >thread-index: AcTi3k4zag4FdGNeSzOsg9ucQ1yLug==
> >> >> >X-WBNR-Posting-Host: 65.118.1.233
> >> >> >From: "=?Utf-8?B?VHVyYm8=?=" <Turbo@discussions.microsoft.com>
> >> >> >References: <4F6A0DC8-92A1-4BB9-9E07-43123A799944@microsoft.com>
> >> >> <00lXKSV4EHA.3388@cpmsftngxa10.phx.gbl>
> >> >> >Subject: RE: Asynchronous Web Service Method Failure
> >> >> >Date: Wed, 15 Dec 2004 11:43:09 -0800
> >> >> >Lines: 77
> >> >> >Message-ID: <E3D1275E-5CE8-4DCE-8145-0BAA1A0BE8EB@microsoft.com>
> >> >> >MIME-Version: 1.0
> >> >> >Content-Type: text/plain;
> >> >> > charset="Utf-8"
> >> >> >Content-Transfer-Encoding: 7bit
> >> >> >X-Newsreader: Microsoft CDO for Windows 2000
> >> >> >Content-Class: urn:content-classes:message
> >> >> >Importance: normal
> >> >> >Priority: normal
> >> >> >X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
> >> >> >Newsgroups: microsoft.public.dotnet.framework.aspnet.webservices
> >> >> >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
> >> >> >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA03.phx.gbl
> >> >> >Xref: cpmsftngxa10.phx.gbl
> >> >> microsoft.public.dotnet.framework.aspnet.webservices:27228
> >> >> >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservices
> >> >> >
> >> >> >Here is the procedure. I call an asynchronous web service method
> for a
> >> >> >particular report. I don't pass any files, just parameters for the
> >> >> report,
> >> >> >such as start date and end date. The web service methods don't
> return
> >> any
> >> >> >files, just URL's to the files so I can execute a response.redirect
> >> when
> >> >> the
> >> >> >web service is done creating the report. Some of my reports are XML
> >> >> >spreadsheets, so to avoid have to create the XML from scratch, I use
> >> >> existing
> >> >> >files and then add the necessary data elements to them. Within the
> web
> >> >> >service method that is creating the report, I open a streamreader or
> >> use
> >> >> the
> >> >> >XMLDocument Load method in order to get the static XML loaded into
> the
> >> >> >XMLDocument. When I'm done, I use a streamwriter to create an
> >> >> XmlTextWriter
> >> >> >to save the document. These methods work fine when done
> synchronously,
> >> >> but
> >> >> >fail when done async. Only methods that use objects derived from
> >> >> >streamreaders and writers fail when run async. I hope I'm making
> >> myself
> >> >> >clear. The error message box that pops up only occurs during
> >> development.
> >> >>
> >> >> >It isn't a client issue.
> >> >> >
> >> >> >"Dan Rogers" wrote:
> >> >> >
> >> >> >> Some questions,
> >> >> >>
> >> >> >> When you say async - do you mean you have created a one-way SOAP
> >> method?
> >> >>
> >> >> >> (this is the right way to think about async for web services).
> When
> >> you
> >> >> >> have a one-way method, you don't get to write a response. In
> other
> >> >> words,
> >> >> >> async server side methods have a "void" signature always. If you
> try
> >> >> >> marking a non-void method with the one way soap attribute, that is
> an
> >> >> error.
> >> >> >>
> >> >> >> That aside, you should consider using SOAP with attachments if you
> >> are
> >> >> >> returning files (no longe async methods).
> >> >> >>
> >> >> >> I hope this helps
> >> >> >>
> >> >> >> Dan Rogers
> >> >> >> Microsoft Corporation
> >> >> >> --------------------
> >> >> >> >Thread-Topic: Asynchronous Web Service Method Failure
> >> >> >> >thread-index: AcTe/QkQd8iqbozvTCKTbAiYn3Wy0A==
> >> >> >> >X-WBNR-Posting-Host: 65.118.1.233
> >> >> >> >From: "=?Utf-8?B?VHVyYm8=?=" <Turbo@discussions.microsoft.com>
> >> >> >> >Subject: Asynchronous Web Service Method Failure
> >> >> >> >Date: Fri, 10 Dec 2004 13:13:03 -0800
> >> >> >> >Lines: 12
> >> >> >> >Message-ID: <4F6A0DC8-92A1-4BB9-9E07-43123A799944@microsoft.com>
> >> >> >> >MIME-Version: 1.0
> >> >> >> >Content-Type: text/plain;
> >> >> >> > charset="Utf-8"
> >> >> >> >Content-Transfer-Encoding: 7bit
> >> >> >> >X-Newsreader: Microsoft CDO for Windows 2000
> >> >> >> >Content-Class: urn:content-classes:message
> >> >> >> >Importance: normal
> >> >> >> >Priority: normal
> >> >> >> >X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
> >> >> >> >Newsgroups: microsoft.public.dotnet.framework.aspnet.webservices
> >> >> >> >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
> >> >> >> >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA03.phx.gbl
> >> >> >> >Xref: cpmsftngxa10.phx.gbl
> >> >> >> microsoft.public.dotnet.framework.aspnet.webservices:27146
> >> >> >> >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservices
> >> >> >> >
> >> >> >> >Greetings to all
> >> >> >> >
> >> >> >> >I have a set of web services that create reports upon request.
> >> These
> >> >> >> >reports can take the form of XML Spreadsheets or dynamically
> >> generated
> >> >> >> .pdf
> >> >> >> >files. I call the create report methods async to give the user
> the
> >> >> >> >opportunity to cancel a long running report. However, any create
> >> >> report
> >> >> >> >method that opens a stream reader (in order to import some XML
> for a
> >> >> >> >spread***) or writer (in order to generate the XML spread***
> >> file)
> >> >> >> cannot
> >> >> >> >be run async. They run fine synchronously, but for some reason,
> >> >> opening
> >> >> >> an
> >> >> >> >IO.Stream causes a "there was an error during async processing"
> >> error.
> >> >> >> The
> >> >> >> >interesting thing is, this error is given in a message box, not a
> >> >> typical
> >> >> >> >ASP.NET error page. Any thoughts?
> >> >> >> >
> >> >> >>
> >> >> >>
> >> >> >
> >> >>
> >> >>
> >> >
> >>
> >>
> >
>
>