StackoverflowException only in release-mode? - winforms

I installed VS2010 on Windows server 2008 R2 and started a Winforms app that makes an asynchronous WCF call for a rather big object graph (~25 Mb in XML) to services deployed on another machine.
When I start in debug-mode in VS2010 (debug->start new instance) it works fine.
When I start in release-mode in VS2010 (debug->start new instance) it crashes with a soft stackoverflow exception, I have no callstack but I suspect the deserialisation of underlying XML.
Any ideas how this may occur?

Try increasing the maximum message size buffers in the WCF config file.

Related

Upload a large File to Sharepoint in a Silverlight application

I have tried what seems like about a dozen different methods of uploading files to sharepoint from a silverlight application. They either have severe limitations (file size limits of less than a meg or so) or lots of security issues that I have not been able to over come. I have tried:
WCF (We are trying not to use any custom WCF services at all FYI though this is the method that I have gotten to semi work)
Sharepoint Web services
Client object model
HTTP put
Webclient write stream
I have seen lots of different examples out there of people doing completely different things but none seem to work and all seem like they are the "old" way of doing things. I am using silverlight 4, sharepoint 2010 on IIS 7. Is there a best practice for uploading large (say 20-30 meg) files? I just want to dump a file into a document library.
I had similar issue. Tweaking web application level setting from central admin, changing asp.net limit in web.confit and following article helped me.
http://blogs.msdn.com/b/sridhara/archive/2010/03/12/uploading-files-using-client-object-model-in-sharepoint-2010.aspx
Just had a thought silverlight has a thing called an HTML Bridge which allows it to interact with the rest of the page. Consider calling a javascript function from Silverlight, and let the javascript function do the actual upload
UPDATE - the Javascript ClientOM doesn't seem to have the SaveBinaryDirect method :-(
How about doing some ExecuteQueryAsync and then in the success call back function (no longer on the UI thread), using the Microsoft.SharePoint.Client version of File? I know this would require downloading the larger assembly, so perhaps that's not so good.
I wonder if there is a way to get the clientOM use a more efficient binding when calling the web services...
Martin
The default upload size limit for the SharePoint client object model is 2 MB. You can change that limit by modifying the MaxReceivedMessageSize property of the service.
This can be done in two ways:
programatically - as described in this link - tho this won't work in Silverlight for example
trough the powershell. On the server where you have SharePoint installed, fire up the SharePoint Management Shell (make sure you run it under the farm administrator account) and run the following commands.
$ws = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ws.ClientRequestServiceSettings.MaxReceivedMessageSize = 52428800
$ws.Update()
This will change the upload limit to 52428800 bytes - or 50 MB. Now, restart the website hosting your SharePoint site (or the entire IIS) for the changes to take effect.

How to avoid massive memory leaks on WPF on .Net 3.5?

When I run my app targeted to .Net 3.5 it has massive memory leaks. 50mb every time I assign a UserControl to a local ref. I only ever create one instance of each UserControl. If I compile and run the same code targeted to .Net 4.0 everything runs fine hovering around the 50mb mark.
Is this a known isue with 3.5? I.e. it's not usable in prod?
/My clients only have 3.5 and won't be moving to 4.0 for awhile so i don't have the easy option
Memory Leak Hotfixes for WPF 3.5 SP1
http://www.infoq.com/news/2010/06/WPF-Memory-Leaks
In particular, have a look at these two hotfixes, which have been fixed in .NET 4.0, but are available as hotfixes to users of .NET 3.5:
http://support.microsoft.com/kb/967634
http://support.microsoft.com/kb/967328
What makes you think it is a leak, and not just memory that hasn't been garbage collected yet? Is there some impact outside of a number in a profiler that you are concerned with? If not, why worry. Would you rather your program used available memory or would you rather it used CPU cycles recovering unused objects?

Since Silverlight 4 can read files on local machine, could it access a SDF file?

I see in some of the SL literature that SL4 (and possibly older versions) allow for file access on the local machine. Would it be possible, then, to install SQL Server Compact on the client machine, and have an SDF file that the Silverlight app could read?
Or I guess, rather, have the Silverlight app talk to a .Net DLL that's reading the SDF file, since Silverlight should be more on the "view" side of the framework.
Edit
The reason for not going straight WPF or Windows client is that we have a use case where we want a web app that can go offline for a limited time. For example, traveling somewhere in rural Brazil that might not have internet connectivity (or bad connectivity.) In that case, we'd like them to take the same app and go OOB and run locally for a time, and then re-sync when they reconnect.
Yap, it can talk to databases, it's feature # 10 in this blog post: Cutting Edge: Silverlight 4 Com Features.
That said, you will have to install something on the client. Thus it would be easier to create a WPF desktop app altogether, as Paul Sasik said in his comment.
I guess a lot depends on the future strategies of Microsoft. Maybe Silverlight will become the preferred client technology also for the desktop.

Do I need a local web service to connect to database for Silverlight OOB?

I've done some cursory reading on Silverlight and data access. From what I can tell, I'll need a web service to hook up a Silverlight application to a database while it's running in browser. Is this true when it goes OOB? Or is there another method that should be used then?
Some background:
We have a .Net 2.0 Winforms application. We're trying to convert the functionality to a web app of some sort without rewriting the business logic. Our internal web developers all write in ColdFusion, so Adobe Air seemed to be a natural fit. However, we've found out that the only way to consume a .Net dll in Air is to write an EXE that makes function calls. (Perhaps something like a WCF service on the local machine.) Since that's the case, I thought I'd see how the data access was in Silverlight OOB, because we will have customers with limited-to-no internet connectivity and will need to be able to access an offline DB.
As far as I know, whether it runs in or out of browser it will need a web service or other means to hit a database. You cannot do it through the Silverlight application because of the sandbox security model used.
In 4.0 there is the added use of COM so you may be able to use that to your advantage.
Otherwise you would just be using a file stored in IsolatedStorage to persist data to, like an XML file for example. Maybe this is what you are looking for though?

Auto update for WinForms application

When creating an auto updating feature for a .NET WinForms application, how does it update the DLLs and not affect the currently running application?
Since the application is running during the update process, won't there be a lock on the DLLs (because those DLLs will have to be overwritten during the update).
Usually you would download the new files into a separate area. Then shutdown and restart and at startup you look for and use the new files if found. Always keeping a last known working version on the side so that the user can revert to something that definitely works if the download causes problems.
ClickOnce is a good technology from Microsoft that does this for you and you can use it directly from Visual Studio 2008.
You'll have to shutdown your application and restart it, as other people have already commented.
I wrote an open-source code to do just that in a transparent mode - including an external update application to do the actual cold update. See http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/
The code is at http://github.com/synhershko/NAppUpdate (Licensed under the Apache 2.0 license)
I have a seperate 'launcher' application that checks for updates via a web service. If there are updates, it downloads them and then executes my application, which is in a seperate assembly.
The other alternatives are using things like ClickOnce, or downloading the files to a seperate area and restarting the app, as someone else mentioned.
Be warned about ClickOnce, though - it's not as flexible as it sounds. And if you deploy to a system that requires elevating your program to a higer security level to run, you might run into problems if you don't have a certificate for your app installed. I found it very difficult to get straight answers on the Internet to things like certificate management when it comes to ClickOnce. If you have a complex app, you may want to just roll your own updater, which is what I ended up having to do.
If you publish via ClickOnce, all of that tends to be handled for you. It has it's own pro's and con's but usually easier than trying to code it all yourself.
Both Wikipedia and 15seconds have decent info on using ClickOnce, how it works, etc.
As others have stated, ClickOnce isn't as flexible as rolling your own solution but it is a LOT less complicated. It has a small learning curve at first, but with pretty much everything bundled into Visual Studio and the use of Wizards, it usually doesn't take long to stumble onto a working solution.
As deployments get more complex (i.e. beyond than just having prerequisites or application code that needs updating) and you need to do a lot of post-install or pre-install tasks, there are things like WiX which give you somewhat of a hybrid solution between Windows Installer and ClickOnce, with the cost of flexibility being a much steeper learning curve.
The only reason I try to avoid custom installers is that you end up spending way too much time trying to get it just right to handle a bunch of different "What If" scenarios...
These days Windows can do such updates automatically for you with AppInstaller if your app is packaged in the MSIX package.
It downloads the new version of the app in another folder inside ProgramFiles\WindowsApps, then when a user runs the app via the start menu, the system knows what folder it should use. The previous version gets deleted when not in use.
If you want to know how to package your app this way I collected my findings in this answer.

Resources