Thursday 19 November 2015

WPF Development for Windows 10

WPF Development for Windows 10

We are currently developing LOB applicatons for Windows 10, we have decided not to develop native Windows 10 applications due to the fact that the applications have to be loaded on each users machine in the App Container. So we have turned back to generic WPF desktop Applications.

My toolset so far is:

Mah Apps for UI
Caliburn.Micro for MVVM
ProperyChanged.FODY for Project Change Injections.

I will be amending this as new tools/frameworks as used.

Thursday 17 September 2015

DOM 1084 WSearch

Ever had the dread black screen after boot on Windows 7,8 and 10 and the only thing you can do to get to the desktop is boot in Safe Mode?

You then look at the event viewer only to see thousands of
DCOM got error "1084" attempting to start the service WSearch with arguments "" in order to run the server:
{9E175B6D-F52A-11D8-B9A5-5050545030}

My solution was to remove the graphics driver and reboot, hope that helps.

Edit:
The problem is rectified by getting into Safe Mode creating a new user (as Administrator), rebooting and logging to the new user and removing the old user.
This seems to fix the problem and I have had this happening on 3 devices.

Friday 3 July 2015

SSL and ServiceStack

SSL and ServiceStack

Ok now I have my ServiceStack working with Android using the native ServiceStack client (AndroidServiceClient). I have now implemented SSL. I've opted for Self Signed Certs at the moment.

My current setup is:


Desktop->Cisco Router->Android

The desktop requires the Self Signed Certificate creating, I'm using SelfSSL.exe for the job.
C:\ssl>selfssl /N:CN=YourSerivceName /V:9999

C:\MMC
Then Add Snap-In Certificate Manager running under Local Machine.
Copy your  YourSerivceName cert to the Trusted Root Certification Authorities

C:\netsh http add sslcert ipport=0.0.0.0:xxxx appid={yyyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy} certhash=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Where:
xxxx is the listening SSL port
{yyyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyy}  is the the assembky guid from AssemblyInfo.cs in your ServiceStack application.

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz is the Thumbprint from your YourSerivceName certificate.

In may case the to allow port xxxx through on my desktop firewall.
On my cisco router I have forward the port:
ip nat inside source static tcp desktop.pc.address xxxx my.wan.addreess xxxx extendable

Then allow the port to be accessible on the inbound rule
access-list aaa permit tcp any host my.wan.address eq xxxx

To test the port is open, start your ServiceStack application
new AppHost().Init().Start("https://+:xxxx/");
then use a free online port checking tool to see if all in ok. I use ww.yougetsignal.com/tools/open_ports/  

Congratulations you created a ServiceStack SSL service! 
 

Wednesday 1 July 2015

AndroidServiceClient with Authentication

I'm currently researching ServiceStack as a replacement to my own services for handling REST between Android and Windows.

I've got the client (Android) working using loopj's AsyncHttpClient. But I was looking for a more native library. Initially I was using Jsonserviceclient but decided on the AndroidServiceClient. The problem I had was setting up basic authentication on the connection. After a few hours of reading JsonServiceClient.java (which AndroidServiceClient extends). It transpired I have to implement my own request ConnectionFilter and set uo the request headers in the void exec(HttpURLConnection urlConnection) method.

After creating code I got the error "cannot set request property after connection is made".
Seems I needed to tweak the code to suppress this error.

CustomRequestFilter...
package com.jjoplc.pod.Views;

import android.util.Base64;
import net.servicestack.client.ConnectionFilter;
import java.net.HttpURLConnection;

/**
 * Created by norm on 01/07/2015.
 */
public class CustomRequestFilter implements ConnectionFilter {

    private String password = "";
    private String username = "";

    static  boolean done = false;
    public void exec(HttpURLConnection urlConnection) {
        if (done) {
            done = false;
            return;
        };

        done = true;

        String credentials = username + ":" + password;
        final String basicAuth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
        urlConnection.setRequestProperty("Authorization", basicAuth);
    }

    public void setUsername(String userName) {
        this.username = userName;
    }

    public void setPassword(String passWord) {
        this.password = passWord;
    }
}



Set up.


 _androidClient = new AndroidServiceClient("http://myservice:8088");
_requestFilter = new CustomRequestFilter();
_requestFilter.setUsername("User");
_requestFilter.setPassword("Password");
_androidClient.RequestFilter = _requestFilter;


And Test.


androidClient.getAsync(new dto.Hello().setName("Normski"), new AsyncResult<dto.HelloResponse>() {
    @Override
    public void success(dto.HelloResponse r) {
        view.setText(r.getResult());
    }

    @Override
    public void error(Exception ex) {
        view.setText(ex.toString());
    }
});

Friday 13 February 2015

Realtime Probing

We have a Cisco 3945E as our WAN router as a test to see if we are vulnerable I added realtime log of denied access on the access rule associated with our WAN connection. The results were quite interesting. Here map below shows IP addresses being mapped in realtime over a 5 minute period.