I tidied up the F# web service, mainly by factoring out an interface for the web service. Without the attributes it looks like this:
type ITestWebService =
abstract TestMethod: Param:string -> string type TestWebService() =
interface ITestWebService with
member x.TestMethod s = "Hello " + s;
However, I noticed when I was setting up the C# host, I needed to cast to get to access the interface, like this:
TestWebService tws = new TestWebService();
ITestWebService itws = tws as ITestWebService;
Neither of these far more obvious ways to access the member work:
tws.TestMethod("test"); // Doesn't compile
tws.ITestWebService.TestMethod("test"); // Doesn't compile