WCF(Windows Communication Foundation)将是您正在寻找的。它几乎完全做到了这一点 - 但是它确实有一个有点陡峭的学习曲线。
我喜欢把它想象成一个框架,它会自动生成一个由你的接口定义的网络“协议”——服务契约。“协议”也独立于底层网络传输——有原始 TCP、HTTP、HTTPS 的绑定,所有这些都考虑到不同的用例。
您永远不必真正关心网络流量在协议或字节级别上的实际外观 - 整个工作都是为您无缝完成的。
聪明的东西,值得学习。
通过纯 TCP 的 WCF 客户端和服务器的完整示例,没有配置文件(所有程序化)
创建一个类库,它将在其他两个程序(您的客户端和服务器)之间共享,其中包含一个接口。
[ServiceContract]
public interface IMyApi
{
[OperationContract]
string SayHello(string s);
}
方案一,服务端:
添加对上面类库的引用。
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class MyApi : IMyApi
{
public string SayHello(string s)
{
return "Hello " + s;
}
}
static void Main()
{
var api = new MyApi();
var svcHost = new ServiceHost(api, new Uri("net.tcp://localhost:12345/MyService"));
svcHost.Open();
Thread.CurrentThread.Join();
}
方案二、客户端:
添加对上面类库的引用。
static void Main()
{
var binding = new NetTcpBinding();
var endpoint = new EndpointAddress("net.tcp://localhost:12345/MyService");
var cf = new ChannelFactory<IMyApi>(binding, endpoint);
var client = cf.CreateChannel();
Console.WriteLine(client.SayHello("Tom")); // output on the console should be "Hello Tom"
}