C# 如何在WCF/client中一次传递多个请求

C# 如何在WCF/client中一次传递多个请求,c#,asynchronous,request,C#,Asynchronous,Request,使用下面的代码,我能够一个接一个地处理请求。这是一个异步过程,所以我不需要得到响应。我只是在传递请求 class Program { static void Main(string[] args) { ProfileRequestData(); } private static void ProfileRequestData() { ProfileRequest.Request[] req = new ProfileR

使用下面的代码,我能够一个接一个地处理请求。这是一个异步过程,所以我不需要得到响应。我只是在传递请求

class Program
{
    static void Main(string[] args)
    {
        ProfileRequestData(); 
    }

    private static void ProfileRequestData()
    { 
        ProfileRequest.Request[] req = new ProfileRequest.Request[4];
        //req.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

        req[0] = new ProfileRequest.Request();
        req[1] = new ProfileRequest.Request();
        req[2] = new ProfileRequest.Request();
        req[3] = new ProfileRequest.Request();

        req[0].Record = new ProfileRequest.RequestRecord();
        req[1].Record = new ProfileRequest.RequestRecord();
        req[2].Record = new ProfileRequest.RequestRecord();
        req[3].Record = new ProfileRequest.RequestRecord();

        req[0].Record.Id = "asdasd123";
        req[1].Record.Id = "asdasd456";
        req[2].Record.Id = "asdasd789";
        req[3].Record.Id = "addjlk123"; 

        ProfileRequest.ProfileRequestClient serviceClient = new ProfileRequest.ProfileRequestClient();

        serviceClient.ClientCredentials.UserName.UserName = @"Liberty\nzy0105";
        serviceClient.ClientCredentials.UserName.Password = "abcddf"; 

        serviceClient.ProfileRequest(req[0]);
        serviceClient.ProfileRequest(req[1]);
        serviceClient.ProfileRequest(req[2]);
        serviceClient.ProfileRequest(req[3]);
    } 
}
我想做的是一次处理所有请求,而不是一个接一个地处理


任何人都可以提供要求的代码吗?

对于像这样的同步作业,您应该使用线程机制。在这里,您可以使用backgroundworkers

var asyncServiceRequester = new BackgroundWorker();
asyncServiceRequester.DoWork += asyncServiceRequester_DoWork;

foreach(var request in req)
{
    asyncServiceRequester.RunWorkerAsync(req);
}
这是您应该使用的代码段,而不是:

serviceClient.ProfileRequest(req[0]);
serviceClient.ProfileRequest(req[1]);
serviceClient.ProfileRequest(req[2]);
serviceClient.ProfileRequest(req[3]);
下面是后台工作人员的工作方法:

static void asyncServiceRequester_DoWork(object sender, DoWorkEventArgs e)
{
    var request = e.Argument as ProfileRequest;//whatever your request type is 
    serviceClient.ProfileRequest(request);
}
更新:

我假设您的用户输入位于一个列表中,用于动态目的,因为您没有提供任何关于它的具体信息。在本例中,您将遍历输入列表,并将值提取到对象数组中。下面是如何首先填充输入列表,然后将这些值分配给对象数组

List<TextBox> inputs = new List<TextBox>();
inputs.Add(input1);
inputs.Add(input2);
...
inputs.Add(inputN);

从文本文件或xml中收集输入应该是另一个问题的主题,但是您可以用相同的方式来完成。只需读取文件或xml,然后以动态方式提取值。

您可以创建线程来并行处理请求-

for (int i = 0; i < req.Length; i++)
{
    new System.Threading.Thread(() => serviceClient.ProfileRequest(req[i])).Start();
}
for(int i=0;iserviceClient.ProfileRequest(req[i])).Start();
}

您好,谢谢您的回复。我对.net技术非常陌生。请告诉我如何在我的代码中为数组分配多个值。我使用了like req[0].Record.Id=“asdasd123”;请求[1]。Record.Id=“asdasd456”;请求[2]。Record.Id=“asdasd789”;请求[3]。Record.Id=“addjlk123”;相反,我如何一次分配多个值。如果您再次回复,可能会非常有帮助。您从哪里获得输入值?从用户输入,或从文本文件,或随机?一旦我了解了您的意图和要求,我就可以帮助您从用户输入中获取输入。另外,请告诉我如何从xml、文本文件中执行。谢谢托尔加·埃维西门
var index = 0;
foreach(var tb in inputs)
{
    var newReq = new ProfileRequest.Request(){
                  Record = new ProfileRequest.RequestRecord(){
                               Id = tb.Text
                           }
              } 
    req[index++] = req; 
    // I would suggest you to use generic lists here too since they are simpler and more flexible.
    // req.Add(newReq); 
}
for (int i = 0; i < req.Length; i++)
{
    new System.Threading.Thread(() => serviceClient.ProfileRequest(req[i])).Start();
}