Contact the Office With your file & Visit The Local Office.
You need to contact the office in writing that has the case to inquire about the delay and inform them that the case has been pending beyond the normal processing time for such cases. Go online to www.uscis.gov "infopass" and make an appointment to go in to the local uscis center to speak to an officer about your case. many times a case file has been misplaced or worse yet, closed in error and an inquiry by the officer at the local uscis could uncover this error.
Write a Warning Letter and then File a Law suit
Write a warning letter that if a decision is not made by a certain deadline you will be forced to take legal action but be careful of the tone of the letter and only make this threat if you KNOW you have an approvable case and the delay is unreasonable. After the deadline given passes then hire an attorney to file a Mandamus Action in District court. The service typically makes a decision on a case within weeks of being served with the Mandamus petition because that is their way of avoiding and closing the law suit.