在这里先简单记录下WCF配置的过程,关于WCF详解,下次再做具体描述。
1. Contract及其实现
a.
[ServiceContract(Namespace = "http://www.******.com")]
public interface IHello
{
[OperationContract]
void Hello();
}
b. 如果方法参数是复杂对象,需要加DataMember标签,如:
[ServiceContract(Namespace = "http://www.。。。。。.com")]
public interface IComplexHello
{
[OperationContract]
string Hello(Person personInfo);
} [DataContract(Namespace = "http://www.。。。。t.com")]
public class Person
{
[DataMember]
public int Id { get; set; } [DataMember]
public string Name { get; set; } [DataMember]
public string Title { get; set; }
}
public class HelloService : IHello
{
public void Hello()
{
Console.WriteLine("hello");
}
}
c. 服务实现 CallbackContract
[ServiceContract(Namespace = "http://www.abc.com")]
public interface IHelloCallbackContract
{
[OperationContract(IsOneWay = true)]
void Reply(string responseToGreeting);
} [ServiceContract(Namespace = "http://www.abc.com", CallbackContract = typeof(IHelloCallbackContract))]
public interface IDuplexHello
{
[OperationContract(IsOneWay = true)]
void Hello(string greeting);
}
2. Host 配置
配置文件可以用VS自带的tool创建,Tools->WCF Service Configuration Editor.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NewBinding0" />
</netTcpBinding>
</bindings>
<services>
<service name="Service.HelloService">
<endpoint address="net.tcp://localhost:5431/HelloService" binding="netTcpBinding"
bindingConfiguration="" contract="Contract.IHello" />
</service>
</services>
</system.serviceModel>
</configuration>
using (var server = new ServiceHost(typeof(HelloService)))
{
server.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
}
3. 客户端代理创建
var tcpBinding = new NetTcpBinding();
var endpointAddress = new EndpointAddress("net.tcp://localhost:5431/HelloService");
var channel = new ChannelFactory<IHello>(tcpBinding, endpointAddress);
var proxy = channel.CreateChannel();
proxy.Hello();
Console.WriteLine("Press <ENTER> to exit.");
Console.ReadKey();
如果是实现了CallbackContract,则需要
var context = new InstanceContext(new HelloCallbackService());
var duplexChannel = new DuplexChannelFactory<IDuplexHello>(context, myBinding,endpointAddress);
);