Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
We're going to develop an ASP.NET MVC 4 web application which needs to be workflow based.
The scenario is something like this:
The Scenario
Users make request to get loan of a bank by submitting a form,
operators find the requests in a grid in their dashboard, they see the
details and if it is okay they send it to boss, and send it back to
users to fix or complete the request, if not. The boss decides to pay
loan or not, if yes and the price is below something it goes to fund
section, if it is above something the request goes to another boss and
so on..
Requirements
In each state there might be some additional relevant data attached, for example the points of user calculated on time of sending the request.
A process manager (admin) exists who can cancel any request wherever it is or pass the request to anyone he wishes.
There might be multiple transitions available which state can move along them, the state should check the conditions and choose one transition.
Meanwhile operators can
Pass requests between each other (if they're allowed to), for example if they are too busy or they're going on vacation (substituent)
See history of requests and see what data changed in round-trips (versioning)
Write notes before sending the request to next one or return it to someone.
The Question
In above scenario, which technology is more suitable and why?
Workflow Foundation
BizTalk
or libraries like:
Simple State Machine
Jazz
stateless
State Machine Compiler
I would not use BizTalk for this, even though I was a BizTalk developer for a number of years, and implemented similar workflows using it.
The reason is that I have come to the conclusion that modelling complex business workflows in BizTalk is an anathema to what BizTalk really does well, which is high performance message routing and transformations, and host integration capabilities.
However, neither would I use WF for this. I think that MS have made WF needlessly difficult to work with. I worked with WF3 which was the first version, so perhaps things have improved. But as far as I know MS removed state machine workflows from WF4 onward and now only supports sequential workflows.
So in answer to your question, I think neither are suitable for this purpose.
Why not start with NO technology stack except for ASP.NET MVC, JQuery, and SQL Server. This seems to be the MS web development standard at the moment. Likely you're already licensed for this.
Even though you seem to have your requirements up front, you'll likely find that some or even most of the requirements you have listed are subject to change or even removal.
So start with one or two core user stories which can be delivered quickly in small iterations and then continue to add features like that. When you get the point where you need to start looking at other technologies or frameworks then that is the time to reassess the decision. At this point I would personally look at using NServiceBus sagas as another option to manage your long running processes.
I think making a decision about tech stack too early in the planning process can work against you in many ways.
Sorry does not address your original question directly.
Related
Closed. This question is not about programming or software development. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 2 days ago.
Improve this question
I'm trying to do a simple mock-demo application to pitch at work. It's going to be demo'd just a few times to the powers-that-be.
In the demo, I wish to make a change in one iphone (e.g. enter a person's age, or name, or whatever : some simple text or number) and this magically appears on another iphone somewhere else.
What simple technologies could I use to pass notifications between devices?
Remember - this is not some high perf app that will be used by bazillions of users. Just a few of us demoing the app in the office.
I wish to use the internet to pass the notification around. Not bluetooth or local network crap or something.
I have an Azure account so I can leverage things in there. I'm happy to use an Amazon service if that's easy and free.
I'm also just going to send a single number or text. not hundreds of messages. maybe 3 or 10 or 20 max (once or twice, per demo).
At first I thought of some polling thingy (eg. hit an endpoint and get any data back) but maybe there's an easier way already?
I also don't want to spend much time on creating this backend. Ie. i don't want to create databases and File->new->website etc.. but hoping there's some really simple mobile services which I could leverage for this.
Finally - the app is created with Xamarin, if this helps answer the question.
Cheers!
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 4 years ago.
Improve this question
Its seems that this question has been ask many time before, however none of the questions I have read really reached any general consensus or substantiated conclusion. So....
I have a .NET 3.5 application framework that is made up of the following nodes:
NET.TCP WCF Listener Service (OS Level Service)
A request processing framework that sits under the listener
An SQL 2008 database that contains configuration data
An SQL 2008 database that contains a store of processed requests (i.e. message data in, message data out, times, status logs etc)
The framework works exactly as required and I am getting great/acceptable response times. However I need to get these response times down as low as they possibly can be. One of the obvious solutions is to implement caching of the, rarely changing, configuration data (node #3).
The key requirements of the caching model would be:
Ability to have cached objects expire after they have not been used for X timespan (i.e. sliding expiration)
Ability to have cached objects expire after X timespan regardless of their last use.
Ability to clear, either entirely or selectively, the cache in a thread safe manner and therefore not impact on any process that may be querying the cache at the time the clear methods are called
As the framework is not a web app, System.Web.Caching cannot be used (well thats the general advice I have read). It seems a little overkill to add the MS Enterprise Framework to the project just for Caching Application Block functionality (that and I have heard that MS are deprecating this as .NET 4 now has System.Runtime.Caching). It isn't viable to use .NET 4 and therefore System.Runtime.Caching
Then there is another aspect to consider. The configuration data is coming out of an SQL database and this will perform its own caching of commonly used data. So maybe caching isnt required here at all? That said the DB and the Service reside on seperate servers, therefore caching in memory on the server will remove the overhead of the network comms between server and DB.
So the question is what caching model, if any, would you suggest for this? At the moment I am leaning towards writing my own, however if this can be avoided I am all ears.
EDIT
After looking at the MS Enterprise Library a little more it seems that this may be a viable solution. It meets most of the requirements and is not overly complicated. This afternoon I intend to do some threading tests to make sure that it works as expected. The question that I do have though is: Is this library production ready or is it more a technology demonstration?
If you are on a single server, then I would go with MS Enterprise Library Caching Block. It works fine in a prod environment. If you get into multiple servers, then I would move to something like memcached.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
our organization is looking for a tool to help with performance testing on each release. We ship a whole bunch of new software and we want to ensure that performance on key functions has not slowed down since the last prod release. We have code in C# and Java. This can be anything from:
when i run this function it takes < 2 seconds
when i run this set of functions the total < 5 seconds
etc . .
Is it best to do this using our basic unit testing continuous integration (nunit, junit, team city) with hand written performance checks or are there specific tools that can help focus on on this area.
Any suggestions?
On my projects (which tend to use Spring), I use the AOP and the PerformanceMonitorInterceptor.
While you may not use Spring, it's definitely some good code to look at and can base a version of your own. I found AOP perfect for this situation because it does not clutter up the actual function calls. If you have a tiered application, then you can put these performance monitors at each level. (Typically for my webapps, I put it as my data access layer so I can monitor database query performance.)
You could try soap ui if your app is remotely accessible:
http://www.soapui.org/userguide/loadtest/index.html
It'll give you all the sort of stats your after:
http://www.soapui.org/userguide/loadtest/images/loadtest_editor.gif
What we use is python to write scripts + extensive logging to generate XML logs which can be then imported into spreadsheet.
I have been tinkering with a tool called 'Basher' that allows you to write "tasks" that are picked up by the system and subsequently run for a configurable amount of time (to allow the JVM to warm up for example) and then performs a run, recording task execution time, averages and the like.
The 1.0 version has been quietly around for a while and if you care to take a look, it is available at http://basher.sourceforge.net
The trunk version contains some improvements - there is maven integration, with configurations being specified in the pom.xml, the bare bones of a reporting framework, etc.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
I've been looking for a simple key/license system for our users. Its partly to stop piracy (avoid users from sharing the application around) and the other half to track the number of 'licensed users' we have. I have already read a few good suggestions on SO but I'm curious as to how people have implemented the 30 day evaluation criteria.
Do you generate a key that stores the date somewhere and do a comparison each time or is it a little more complicated - deleting the file/removing the registry shouldn't deactivate.
Are there any example implementations out there that can give me a head start? The irony is that our PM doesn't want to license a third-party system to do it for us.
This is for a Windows Forms application.
Have you checked out the Rhino-Licensing project by Ayende Rahien. You can also see his blog post about licensing a commercial product which led him to develop this solution.
There are two separate challenges: i. How do you prevent a copied app from running. ii. How to prevent users from ripping out/bypassing your prevention scheme. The first one is usually done by taking a hard to copy signature of the user's system (e.g. Hard Drive ID + Processor ID + RAM, etc) and using it as the seed/key AND activating it on-line by calling "home".
The Second issue is harder to do in .Net since the source code can be in someway extracted and recompiled to exclude your protection system. The key here is to make it cheaper to buy the license than to remove the protection at the user's end. You may find that for most products, the suggestion to use a customized engine to encrypt your product libraries that also contain your copy-protect and decrypt it at initial run-time, might be enough.
I am not sure you can actually protect a .NET - There may be commercial solutions that do the trick. The reason is .NET code can be seen through Lutz Roeder (Thanks Jasonh for the heads up) Red Gate's Reflector (It was formerly by the named guy above). The best way to deal with it is to look for code obfuscation which makes reflecting more trickier, I can point you to one place I know of that does this for free - Phoenix - NtCore.Com.
The more esoteric solution would be to create a .NET hosting environment in C++, load the binary image (which could be encrypted) and the hosting environment than undecrypt it in memory - have heard of that theory but not sure how that would be done in practice. Please do not use your own protection scheme as there could be a weakness.
Someone once said - "Security through obscurity"....
Hope this helps,
Best regards,
Tom.
I worked on a project that handled this by putting some critical functionality (for example data storage, reporting, or payments) on an external server we ran, and requiring the user to log in to this server to get the functionality.
Customers can make backups, share, or run the application locally, but to access this critical function they have to type a password in to our application and connect to our server. Customers knew the password allowed changing their data, so they would not want to share the password with other people.
This was handy because we do not care how many copes of the application are out in the wild, we only track server connections. We included machine-identifying data like MAC address in the connection data, so we can track which machines are connecting.
I'm not just saying this because my company sells the OffByZero Cobalt software licensing solution for .NET: your PM should know that software licensing is very hard to get right, and if you roll your own, you'll be supporting it for the foreseeable future.
Take a look at the article Developing for Software Protection and Licensing; it explains how to choose a solution, why you should obfuscate your application and gives a number of tips for structuring your code to be harder to crack.
In particular it makes the point that the vast majority of companies should outsource their software licensing, as it makes no sense to spend developer time on building and maintaining a complex system that isn't your core business.
What is more important to your company: adding an important new feature to your product, or tracking down a peculiar permission behaviour on an ancient version of Windows that's clobbering your licensing system?
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I don't know if anyone can point me in the right direction of writing code to send a file by AS2?
A colleague of mine wrote a C# implementation of AS2 for one of our clients some time ago (he used .NET 1.1) so I can tell you that what you want to do is certainly achievable.
To do this you would need to get a copy of the AS2 RFC as well as any other RFCs that the AS2 one references (the various HTTP ones for example).
You will also need something to test your work against - some other implementation of AS2 that you can send your messages to.
This is the approach my colleague followed and at the end of the process he had made an AS2 transport which has been in production for around 7 years, dealing with several multi-national companies who used Drummond certified products.
You do not absolutely need to go down this track - you can send a valid AS2 message just by supplying the right AS2 headers in an HTTP post, but then you would only be implementing a bare minimum subset of the AS2 standard, which would not include the encryption, authentication and non-repudiation aspects of the protocol that make it worth using.
If you only want to send AS2, perhaps with basic encryption and signing, this could be feasible.
I would, however, strongly advise against you writing your own AS2 implementation unless you a) absolutely must or b) are sure you will only be sending basic messages with simple encryption and signing.
I say this because:
The code is non trivial
You will run into issues around certification
The certification issue is possibly the biggest hurdle. All the big vendor AS2 offerings (e.g. Gentran, WebSphere, BizTalk) are Drummond certified. What this means is that they have passed a series of tests administered by the Drummond Group Inc. establishing that their implementation of AS2 can interop with all other implementations.
Drummond certification is a time consuming and costly process, and without it you are always viewed as being suspect. Even if you implement a flawless AS2 sender, your code will always be the place fingers are pointed.
As far as alternatives go, there are several free or relatively inexpensive AS2 implementations like OpenAS2 (only Java) or Boomi (commercial but not too expensive) up to full blown B2B engines like Websphere and BizTalk.
I've not heard of AS2Box previously, but it does sound like it could meet your needs (though typically people using AS2 would not want to go through an untrusted third party).
As with anything, it really depends on the specifics of what you need to do.
This is a bit late, but for keeping this answer up to date: Now with Azure Biz Talks services, it's not too bad just to use BizTalk. Here is a good example:
http://code.msdn.microsoft.com/windowsazure/Windows-Azure-BizTalk-EDI-8ebd429f