gpt4 book ai didi

c# - 如何通过套接字编码 .Net 接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 22:28:34 24 4
gpt4 key购买 nike

我在 C# 中有一个接口(interface),类似这样:

interface ITest
{
int Method1(int something);
}

所有方法都有基本类型(整数、字符串、枚举)的参数。

现在我希望实现和客户端在通过套接字通信的不同机器上运行。我可以手动做的是像这样实现:

class Test : ITest
{
int Method1(int something)
{
m_Serializer.Serialize(something, m_Socket);
int result = (int)m_Serializer.Deserialize(m_Socket, typeof(int));
return result;
}
}

有没有办法让它自动化,即自动为给定的接口(interface)生成这样的包装器?

我可以通过 Reflection.Emit 手动生成它,但这相当复杂。有什么简单的方法吗?

最佳答案

WCF (Windows Communication Foundation)将是你正在寻找的。它几乎完全做到了这一点——但是它的学习曲线确实有些陡峭。

我喜欢将其视为一个框架,它会自动生成由您的接口(interface)定义的网络“协议(protocol)”——服务契约。 “协议(protocol)”也独立于底层网络传输 - 存在针对原始 TCP、HTTP、HTTPS 的绑定(bind),所有这些都考虑了不同的用例。

您永远不必真正关心网络流量在协议(protocol)或字节级别的实际情况 - 一切都为您无缝完成。

聪明的东西,值得学习。

基于普通 TCP 的 WCF 客户端和服务器的完整示例,没有配置文件(所有程序)

创建一个类库,它将在其他两个程序(您的客户端和服务器)之间共享,包含一个接口(interface)。

[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"
}

关于c# - 如何通过套接字编码 .Net 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12626874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com