我在几个项目中都做过,效果很好。而且不需要使用反射,因为WCF已经准备好了所有必需的基础设施。
例如,下面的代码将调用默认的工作流服务模板,您只需提供正确的URL即可。
class Program
{
static void Main(string[] args)
{
var factory = new ChannelFactory<IMyService>(new BasicHttpBinding(), new EndpointAddress("http://localhost:9199/Service1.xamlx"));
var proxy = factory.CreateChannel();
var response = proxy.GetData(new GetDataRequest() { Value = 42 });
Console.WriteLine(response.Value);
Console.ReadLine();
}
}
[ServiceContract(Name = "IService")]
interface IMyService
{
[OperationContract]
GetDataResponse GetData(GetDataRequest request);
}
[MessageContract(IsWrapped = false)]
class GetDataRequest
{
[MessageBodyMember(Name = "int",
Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")]
public int Value { get; set; }
}
[MessageContract(IsWrapped = false)]
class GetDataResponse
{
[MessageBodyMember(Name = "string",
Namespace = "http://schemas.microsoft.com/2003/10/Serialization/")]
public string Value { get; set; }
}
如果您需要更多的灵活性,您还可以创建一个带有类型消息的Service Enter和Out-Outlook,以及一个名为“*”的操作契约,您可以根据需要手工编写您的WCF消息。