2010-08-16 11 views
0

J'ai un projet .NET WeBService et une référence à celui-ci d'un autre projet. Visual Studio génère une classe proxy (SoapHttpClient) avec toutes les méthodes de mon service Web. Le projet dont j'utilise le WebService est une application mobile .NET CF. Cela signifie que l'accès à Internet et WebService ne sont pas toujours disponibles. Ce que je dois faire est d'assurer que toutes les demandes de mobile au service Web l'atteindront finalement. Je veux le faire en mettant en file d'attente toutes les demandes à WebService dans un thread de travail qui exécute les requêtes Web en série jusqu'à ce que l'exécution réussisse. Le problème est que la classe proxy générée a toutes les méthodes Web nommées. Il n'y a pas de mécanisme qui puisse "extraire" un "objet Web Request" générique de la méthode que je peux stocker pour une utilisation ultérieure. Je dois appeler les méthodes Web explicitement en utilisant leurs noms et paramètres. Cela compile mon code. Ma question est - Existe-t-il un mécanisme dans .NET WebServices pour "extraire" une demande Web en tant qu'objet et nous plus tard?Services Web .NET - gestion des requêtes Web

Cordialement

Dominik

Répondre

1

A ma connaissance, proxy généré .NET ne donnera pas les objets de requête Web que vous voulez. Mais vous pouvez créer un proxy simple pour stocker les informations de la requête, puis utiliser le proxy .NET (ou la classe SoapHttpClientProtocol) pour effectuer la requête Web. Ci-dessous le code du modèle exemple:

public class MyRequest 
{ 
    public MyRequest(string methodName, params object[] parameters) 
    { 
     this.MethodName = methodName; 
     this.Parameters = parameters; 
    } 

    public string MethodName { get; set; } 
    public object[] Parameters { get; set; } 

    public object[] Response {get; set;} 
} 

public class MyProxy : dotNetGeneratedServiceProxy 
{ 
    List<MyRequest> Requests { get; set; } 

    public void QueueMethod1(int param1, string param2) 
    { 
     Requests.Add(new MyRequest("Method1", param1, param2)); 
    } 

    public void QueueMethod2(string param1) 
    { 
     Requests.Add(new MyRequest("Method2", param1)); 
    } 

    public void RunAllRequests() 
    { 
     foreach (var request in Requests) 
     { 
      var result = this.Invoke(request.MethodName, request.Parameters); 
     } 
    } 
} 

espère que cela vous donnera une idée.