Je travaille sur une application web et je veux appeler un webservice via son URL. Comment puis-je atteindre cet objectif?C# appeler webservice par url
J'ai la route suivante enregistrée dans mon global.asax;
routes.MapRoute(
"ServiceHandler",
"{*path}/{*.svc}",
new { Url = "Services/Service.svc/GetLatestTweets" }
);
Et je veux appeler le webservice, dans ce cas pour obtenir les derniers messages de twitter par une url similaire à celui ci-dessous; Lorsque j'utilise la route enregistrée comme mentionné, j'obtiens une erreur avec la stackstrace que j'ai ajouté ci-dessous.
[ArgumentException: A catch-all parameter can only appear as the last segment of the route URL.
Parameter name: routeUrl]
System.Web.Routing.RouteParser.Parse(String routeUrl) +3823656
System.Web.Routing.Route..ctor(String url, IRouteHandler routeHandler) +24
System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, String name, String url, Object defaults, Object constraints, String[] namespaces) +86
System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, String name, String url, Object defaults, Object constraints) +28
System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, String name, String url, Object defaults) +18
CMS.Presentation.FrontEnd.Framework.CMSApplication.RegisterRoutes(RouteCollection routes) in C:\Projects\Website\Web.Presentation\FrontEnd\Framework\CMSApplication.cs:62
CMS.Presentation.FrontEnd.Framework.CMSApplication.Application_Start() in C:\Projects\Website\Web.Presentation\FrontEnd\Framework\CMSApplication.cs:80
[HttpException (0x80004005): A catch-all parameter can only appear as the last segment of the route URL.
Parameter name: routeUrl]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +3988565
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +325
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375
[HttpException (0x80004005): A catch-all parameter can only appear as the last segment of the route URL.
Parameter name: routeUrl]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11529072
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4784373
Que dois-je faire ou changer afin que je puisse appeler le webservice par son URL? Je travaille avec un simple service wcf
Merci pour la réponse :-) Avez-vous un exemple comment je dois gérer cela dans le contrôleur? – Rob
Cela dépend des services quant à la façon dont vous devez analyser la chaîne. Si vous deviez construire une façade pour l'api, alors vous pourriez mettre en œuvre un modèle de liaison ainsi, et juste le look d'action du contrôleur comme: ActionResult ExecuteServiceCall (service ServiceFacade, MethodInfo ServiceMethod, les arguments de NameValueCollection) {}, mais , tout dépend de vous et de la façon dont vous voulez le faire. C'est probablement la meilleure chose. – smartcaveman
Thnx pour la réponse, va essayer de le résoudre. Une autre question s'est produite à moi. Pourquoi ne puis-je pas utiliser quelque chose comme ça pour simplement ignorer la route? routes.IgnoreRoute ("{ressource} .svc/{* pathInfo}"); – Rob