.net 再次阻塞等待响应

.net 再次阻塞等待响应,.net,multithreading,events,blocking,c#-5.0,.net,Multithreading,Events,Blocking,C# 5.0,询问如何传达查询和接收回复。我也想发送行动和信息请求。其中一些请求将采用参数,而大多数不会。在所有的回复中,几乎所有回复都会回复“OK”,但其他回复会向我发送信息。除了这个命令协议之外,链路的两端对彼此一无所知。OP得到了他的答案,告诉他如何包装代码 这些回答告诉我应该使用什么技术,如何包装代码,等等,让我不知所措。;由于我正在使用最新的工具进行全新的开发,我发现并接受了我想要使用TAP的想法,Jon Skeet回答了这个问题。我想我现在知道如何包装我的代码了。不过,我的问题不是使用什么技术,也

询问如何传达查询和接收回复。我也想发送行动和信息请求。其中一些请求将采用参数,而大多数不会。在所有的回复中,几乎所有回复都会回复“OK”,但其他回复会向我发送信息。除了这个命令协议之外,链路的两端对彼此一无所知。OP得到了他的答案,告诉他如何包装代码

这些回答告诉我应该使用什么技术,如何包装代码,等等,让我不知所措。;由于我正在使用最新的工具进行全新的开发,我发现并接受了我想要使用TAP的想法,Jon Skeet回答了这个问题。我想我现在知道如何包装我的代码了。不过,我的问题不是使用什么技术,也不是如何使用async/await

但是这个代码看起来像什么?使用什么方法/参数等发送查询并获得答案?如何在找不到对方的两端建立通信?如何包含参数?等等

我想使用一种策略模式,这样在一种情况下,两端是表单,命令是按钮按下的结果,文本框的参数。这种形式存在。第二种策略尚未编写,即两端通过计算机之间的网络进行通信。服务器将是一个Windows服务,命令模块是一个表单,它将发送命令以响应生产线自动化

说“使用RPC”或“使用套接字”对我没有帮助。什么是RPC?套接字代码与发送命令的部分有什么关系。。。代码是什么样子的

假设我有:

    public async void SendCommandAsync(Command c, Parameters p)
    {
        string response;
        await response = SendAsync(c, p);
    }
在调用此函数之前,需要准备什么?什么是SendAsync()?它如何与远程侦听器通信?两种策略之间有什么并行性,一种通过网络与SOAP或HTTP通信,另一种在同一台计算机上,一种形式与另一种形式通信


谢谢你容忍我的无知。

HTTP协议似乎正是你想要的。它通过TCP与远程主机执行单个请求/响应对。单独的请求和相应的答复是独立的。HTTP本质上为您提供了以下形式的函数:

byte[] response = Request(string remoteUrl, byte[] request);
此函数中的所有内容都由库自动完成。服务器也是如此

如果您想使用结构化数据(对象树)进行通信,您可能应该使用Web服务(可能基于SOAP)。它们是HTTP之上的一层,允许您发送/接收对象,而不是字节数组

关于策略模式:您可以将模式放置在不同的层次上

  • 如果您愿意采用TCP(也适用于本地主机环回),则只需更改远程端点ip和端口
  • 如果您不愿意采用TCP,可以假定存在双向
    流来交换消息。HTTP完全可以在任何流上工作。在本地主机连接上,可以使用命名管道。在此过程中,您可以使用
    MemoryStream
  • 或者,通过假设函数的形式
    objectresponse=Request(objectrequest),您可以完全抽象掉所有传输方面存在。该功能可以通过HTTP上的SOAP或任何其他自定义传输来支持

是否会提供有关TCP、序列化、SOAP等的教程。。。帮你?如果是,这对于堆栈溢出来说不是一个好问题。阅读综合教程对你有更好的帮助。我想他们不会。我以前写过这类代码,但是当前的开发模型非常简单,但我并不熟悉。我想其他人可能也是这样,他们可以举一个简单的例子。如果有一个基础,我可以从那里开始。在你提到的那些东西中,你会用哪一个?(为了更清楚一点,我将编辑我的问题…)您的问题是否可以概括为“如何通过网络向不同的进程和/或机器发送请求和接收回复?”?你是在寻找如何务实地实现这样一个目标的指导吗?在寻找如何实现我的目标时,无论我用什么搜索词,我都很少找到如何做到这一点的方法,更多的是找到可以使用的模式。所以我接受了这个模式。但是考虑到这一点,AFAIK方法与过去不同。我在寻找:“给定TAP模式,等待的方法会做什么?”如果它们与以前没有什么不同,那就好了。但直到最近——我在async/await上读到的博客中没有基于发布编译器的,只有测试版代码——他们没有提到它们是否是可等待的,因此我不清楚;想必,其他人也不会。好吧,到目前为止,这是一个好的开始。你是说我应该做:等待字节[]响应=请求(字符串url,字节[]命令)?(这似乎不是一个异步方法。但它是?)异步与否似乎与您想要实现的目标无关。是否编写新的WebClient().DownloadString(“http://example.org/“
等待新的WebClient()。下载StringTaskAsync(”http://example.org/“”
取决于项目的结构以及使用的技术。它们执行完全相同的操作:下载一个字符串(该代码是完整的、可执行的,顺便说一句,它执行HTTP请求)。