0
votes

Minimiser les demandes de service

J'ai reçu un service WCF à partir duquel je peux obtenir une distance en mètres d'un point à un autre (latitude et lontitude) avec la méthode du contrat:

public double GetDistance(double originLat, double originLng, double destLat, double destLng)


3 commentaires

Utilisez-vous un service WCF pour obtenir une distance de point entre 2 points de long / lac? Si vous êtes alors vous pouvez calculer que vous-même.


Je ne l'ai pas écrit, mais j'ai besoin d'une réponse qui n'implique pas la méthode du côté du client.


C'est une contrainte problématique. Toute langue existante peut faire ce calcul. La mise en cache ne vous aidera pas car les demandes ne vont pas répéter beaucoup. Il y a juste trop de combinaisons possibles de demandes. Je ne vois aucune bonne solution impliquant un client appelant une application distante pour la réponse à un problème de mathématique. Le travail qu'il fait pour former la demande, l'envoyer, l'attendre, et analyser le résultat est tellement plus compliqué que les mathématiques elles-mêmes. Je serais intéressé par la raison pour laquelle vous ne pouvez pas le faire sur le client car même si cela semble que vous ne pouvez pas y avoir un moyen.


3 Réponses :


1
votes

Cette méthode n'est qu'une fonction mathématique, il n'est donc pas nécessaire de l'organiser dans un service WCF. Tout ce qui appelle ce service devrait simplement avoir sa propre version locale de cette méthode. Cela minimisera les demandes de service en les éliminant, et il sera incroyablement plus rapide.

Dans les détails supplémentaires, il semble que vous exécutez également une requête qui renvoie un certain nombre de points et sur ces points que vous souhaitez trouver les cinq les plus proches de l'emplacement donné. P>

La cache ne permet que si vous faites les mêmes demandes avec une certaine fréquence. Il est possible que la première requête, qui renvoie une collection de points, pourrait être répétée, elle pourrait donc avoir un sens de mettre en cache la collecte de points pour une requête donnée. P>

mais à moins que l'emplacement que vous êtes La comparaison de ces points est également fréquemment répétée, l'ajoutant que cela gâcherait votre mise en cache. P>

Par exemple, ce pourrait em> bénéficier de la mise en cache ... P>

Points[] GetPointsClosestToSomeLocation(queryInput, Point location)


1 commentaires

Je ne l'ai pas écrit, mais j'ai besoin d'une réponse qui n'implique pas la méthode du côté du client.



0
votes

Si vous essayez de trouver du point à distance ou à une distance de vol entre 2 points de long / lat, vous pouvez regarder la réponse ci-dessous:

donc répondez

Si vous vérifiez la distance par route, votre seule option consiste à mettre en cache les résultats entre ces points si cela s'appelle souvent. Méfiez-vous de la mise en cache, votre fournisseur pourrait interdire cela et le mieux vérifier leurs T & C.


0 commentaires

0
votes

En fin de compte, la réponse est de traiter la (longitude, la latitude) comme (x, y) coordonnées et calculer une longueur d'une ligne à partir du point de départ du courant (x, y) avec la formule:

d = sqrt ((x1-x2) ^ 2 + (y1-y2) ^ 2)

Nous avons d'abord lu 5 points, calculant la longueur et en gardant la distance maximale et le point sur la distance maximale (avec une pile ou une liste afin de conserver plusieurs distances et points). À chaque point, nous lisons, nous calculons simplement la distance et mettons à jour la distance et le point si la nouvelle distance est inférieure


0 commentaires