wp8 c# ApplicationSettings - c#

If I do this:
IsolatedStorageSettings.ApplicationSettings["mytype"] = "x-type";
I can later find mytype-setting even if I didn't use Save-method.
Should I use Save for some reason ?

Data written to the IsolatedStorageSettings object is saved when the
application that uses the class is closed. This can occur when the
user closes the Web browser, refreshes a page, or browses away from
the page. If you want your application to write to isolated storage
immediately, you can call the Save method in application code.
From MSDN
Meaning that as long as you don't close your app you'll be fine, but if something happens (imagine you receive a phone call), or if you really close your app the variable will be lost. You should use the Save() method.

Related

Caching of "multiple sites" with Windows Phone 8.1

I have this weird problem my website won't cache the mainsite!
Here is a little overview about what I am trying to do
The first page that is being loaded is the
[DidTheUserLoggedInBefore?.html]
which checks if the user already has logged in or not depending on that result the user will be redirected to
either [LOGIN.html] or [MAINPAGE.HTML]
pretty simple!
But here comes the problem when the user restarts the app in Offline mode the App should redirect immediately to the mainpage (assuming the previous login was a success).
But that doesnt happen at all.
Instead the [DidTheUserLoggedInBefore?.html] from cache was called (which is correct) and starts loading the mainpage which isnt in cache which results in a whitescreen aka my error.
So how do I get my App to cache the Mainpage?
I've tried setting CacheSize to 100, but that didn't changed a thing :(
You can't check if the user has logged in with a .html file... You need some sort of server side language to set a cookie... Anyway this isn't much clear, is your "app" just a webview?
I couldn't let the webview cache more than 2 (simple) webpages...
WebView ignores he offline.manifest.php file too ...

How to control multiple connections in ASP.NET web page

I have web page index.aspx and corresponding server side code index.aspx.cs. This C# code has a method which cannot executed in parallel if multiple clients connect to my website. How can I restrict this?
Here is what the method does. It creates a folder, zip it and make it available for the user to download. My requirement is that when one user is executing this method, some other user should not do this because it will create the same folder again which leads to corruption of data.
I tried using Session objects. But I came to know that session objects are stored per client basis.
Can anyone suggest me some solution?
My immediate advice would be: create a random folder name per request, which would allow you to run them concurrently. However, if that isn't an option then you will need to synchronize using something like lock or Mutex. However, this would only work well if you are returning the result from the current request, rather than zipping it in one request, and letting them download it the next.
Frankly, though, I think that you should do the zip in the request for the zip. Indeed, unless the file will be huge you don't even need to touch the file-system - you can create a zip in-memory using MemoryStream and any of the zip encoders (System.IO.Packaging.ZipPackage for example) - then just hand the client the data from the MemoryStream.
If you are using MVC, this is just return File(contents, contentType). With vanilla ASP.NET you need a few more steps.
The Application context or a static class is application wide. So you can store a flag which indicates that the process is already started. After the procees ended, you can delete the flag.
http://msdn.microsoft.com/en-us/library/94xkskdf(v=vs.100).aspx
And always use Application.Lock when you write to the application state and lock(mutex) when you use a static class.
In your case a static class would be a better solution, because it seems that the application context exist only for compatible purposes to classic asp: Using static variables instead of Application state in ASP.NET
static object mutex= new object();
lock(mutex)
{
//Do the work
}
If you use the classic asp.net session you do not need to do anything because session all ready lock the run of the pages from multiple users.
If you not, then you can follow what Marc suggest, use Mutex.
About the session lock:
Web app blocked while processing another web app on sharing same session
jQuery Ajax calls to web service seem to be synchronous
ASP.NET Server does not process pages asynchronously
Replacing ASP.Net's session entirely

Linking to the app's Store Page on WP7 using XNA

Is it possible for an XNA game/app to obtain it's own store link url through code or would I have to submit an app, wait for it's store link to become available and release an update including the store link?
Basically I want the player to be able to post his or her score to any social networks set up along with a link to the store page.
-Short question I know but my Google-Fu failed me this time.
To get a store URL, you will need to get hold of the app id. This is done by calling GetManifestAttributeValue. Note that the actual app id (Product ID) is generated when the app is published, and is different than the temporary one that is in WMAppManifest.xml. This causes a chicken and egg scenario when it comes to testing this.
See this for detailed instructions:
http://code.msdn.microsoft.com/Generating-a-Windows-Phone-9d19f939/
If all you need is to link to store from within your app, then use MarketplaceDetailTask to launch to the store. Leave ContentIdentifier as null and it will attempt to bring up the detail page of the current app. If you need to bring up the detail page of a different app, then you will need to know the app id, which you can only get after that app has been published.
http://msdn.microsoft.com/en-us/library/hh394017%28v=vs.92%29.aspx

Best way to persist settings when application exists

I have a Metro app where I need to save some data about the current "session" so that the next time the user launches my application, this session data may be restored. Some of the data is not meant for the user, but to aid in which data should be displayed right away, and which should be displayed at a later time if requested by the user.
I have been using LocalSettings for other things but have just noticed that these settings only appear to last for the lifetime of the application.
How should we be storing settings that need to be saved to the App's data folder?
You can achieve it by binding the data in to certain format , saving it in a file , retrieve it when the app launches.
Create a ApplicationDataContainer.
Initialize a StorageFile with the name you wish.
Serialize your "theme/settings" object using
DataContractSerializer.
Write the content to the StorageFile instance created.
On Application launch:
Deserialize the data.
Populate in the way you want.
You can rather use XML as mentioned by #Lütfullah Kus
you can store log to xml file like "lastform:frmSomething;lastwindow:somewindow..." and you can reload it when app start again.

New opened window opens but closes immediately

I'm trying to download file from FTP using javascript, for which I created the following topic:
Is it possible to download file from FTP using Javascript?
From there I learned that I can use window.open('ftp://xyz.org/file.zip'); to download the file. It opens a browser new window, but the window closes immediately.
How I can I force it to stay open?
Actually I do all these in Silverlight application:
Here is the code:
HtmlPage.Window.Eval("window.open('" + url+ "', 'Download', 'height=500,width=800,top=10,left=10');");
I also tried this,
string targetFeatures = "height=500,width=800,top=10,left=10";
HtmlPage.Window.Navigate(new Uri(url), "_blank", targetFeatures);
But both results in same : it opens a window, and closes it immediately. I see it just for fraction of second!
I know this doesn't answer your question, and I'm sure you know all of this. I'm answering more because I don't see this point brought up often. :)
Silverlight has very limited support for client interactions. Javascript is a shim that in my opinion gets overused to try and bypass things that Silverlight was architectured against. It would have been very easy for Microsoft to include FTP support in Silverlight but it was excluded for a reason.
However, Silverlight has great support for webservice interactions. So the recommended way of getting a file would be to call a webservice that would do the FTP transfer for you and then send the contents down to the Silverlight application via the webservice. Possibly even processing it on the webservice side for any business logic etc.
Like I said, I suspect your requirement is to not use a webservice (to pass the bandwith cost onto the user most likely). But it'd be interesting to know more about your business problem instead of your technical problem for the solution you've chosen.
It closes because it triggers file download. You can open two windows - one for message and one to download file, but I thiunk user will know it is downloading...
If I were you, I'd open up a page that has whatever visual/UI stuff you'd want to show the user, and either have a META tag that redirects to the download URL, or has a javascript blurb to fire off said download. That way, your window will stay open, but the download will still start automatically.
to keep it open use
var test = window.open();
test.location = 'ftp://openbsd.org.ar/pub/OpenBSD/2.0/arc/kernels/bsd.ecoff';
and to not open any window use
window.location = 'ftp://openbsd.org.ar/pub/OpenBSD/2.0/arc/kernels/bsd.ecoff';
or make a normal link
Remember that a browser is not meant to "display" (visually anyway) the FTP protocol, and not all browsers will suport it. If you want to allow the user to download something, consider using a normal http:// protocol, and opening a window normally as others have suggested.
If you really need the download to be hosted via FTP, consider your backend ingesting (and caching) the file and return it to the user via http
There is nothing to be parsed on the browser's side, hence it closes. If you want to have the page open, you'll have todo something dirty. Like creating a html (or php) page and serve the content you want the user to see, then with a hidden i-frame which will call the FTP contents.
This way your user will see the content you want them to see, and the file is being downloaded.
I had the exact same problem, Silverlight opening a new window for downloading a file would flash a blank window up briefly and it would disappear again without the file download occurring.
This seemed to happen in IE 8 (not 9 and up) and could be fixed by going into Tools->Internet Options->Security then click Custom level... (for whatever zone your site would be in) and go to Downloads->Automatic prompting for file downloads and make sure this is Enabled (I also have File download enabled below that). This Automatic prompting for file downloads setting seems to be absent from IE 9+.
Another workaround is to not open in a new window, if the target url immediately downloads a file it won't change the current window so there's no difference in UX:
HtmlPage.Window.Navigate(new Uri("\download.ashx?fileid=12345"));

Categories

Resources