【问题标题】:c# - Acess WebService - XMLc# - 访问 Web 服务 - XML
【发布时间】:2016-07-03 11:38:01
【问题描述】:

我正在使用 c#,而且我是新手。 我有一个网络服务的 URL:http://grillassessmentservice.cloudapp.net/GrillMenuService.svc

登录:jobs@isolutions.ch

密码:cleancode

这给了我 XML:

<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom"xml:base="http://grillassessmentservice.cloudapp.net/GrillMenuService.svc/">
 <workspace>
  <atom:title>Default</atom:title>
   <collection href="GrillMenus">
     <atom:title>GrillMenus</atom:title>
   </collection>
   <collection href="GrillMenuItemQuantities">
     <atom:title>GrillMenuItemQuantities</atom:title>
   </collection>
   <collection href="GrillMenuItems">
     <atom:title>GrillMenuItems</atom:title>
   </collection>
 </workspace>
</service>

我的控制台应用程序中有该 c# 代码:

 static void Main(string[] args)
    {
        Uri serviceUri = new Uri("http://grillassessmentservice.cloudapp.net/GrillMenuService.svc");
        var serviceCreds = new NetworkCredential("foobar@outlook.com", "test");
        var cache = new CredentialCache();
        cache.Add(serviceUri, "Basic", serviceCreds);
        var service = new GrillMenu.GrillMenuContext(serviceUri)
        {
            Credentials = cache
        };
        foreach (var grillMenu in service.GrillMenus.Expand(g => g.GrillMenuItemQuantity))
        {
            Console.WriteLine("Menu: {0}", grillMenu.Name);
            foreach (var grillMenuItemQuantity in grillMenu.GrillMenuItemQuantity)
            {
                service.LoadProperty(grillMenuItemQuantity, "GrillMenuItem");
                Console.WriteLine("{0} x {1}", grillMenuItemQuantity.Quantity,
                grillMenuItemQuantity.GrillMenuItem.Name);
            }
            Console.WriteLine();
        }

    }

但我无法访问网络服务。有人可以解释一下它是如何工作的吗? 我试图通过添加参考来访问,在登录名和密码上给我错误。在那个阶段: 谢谢。

【问题讨论】:

    标签: c# xml web-services


    【解决方案1】:

    它不是标准的 Web 服务,而是可以通过 OData 提供程序访问的提要 (Atom) 类型的服务。 要添加它,请右键单击参考,添加服务参考链接(或类似的),粘贴 http://grillassessmentservice.cloudapp.net/GrillMenuService.svc/。 在此之前不要忘记添加对 System.Data.Services 的引用 - 这是一个完整的示例。

    请记住,您需要为每个子服务输入凭据,可以这么说 - 之后它将起作用。

    
    using System;
    using System.Data.Services.Client;
    using System.Net;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                Uri grillUri =
                    new Uri("http://grillassessmentservice.cloudapp.net/GrillMenuService.svc/",
                        UriKind.Absolute);
                ServiceReference1.GrillMenuContext context = new ServiceReference1.GrillMenuContext(grillUri);
                var serviceCreds = new NetworkCredential("jobs@isolutions.ch", "cleancode");
                var cache = new CredentialCache();
                cache.Add(grillUri, "Basic", serviceCreds);
                context.Credentials = serviceCreds;
    
                try
                {
                    foreach (ServiceReference1.GrillMenuItem o in context.GrillMenuItems)
                        Console.WriteLine("Name: {0}", o.Name);                    
                }
                catch (DataServiceQueryException ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
    }
    

    【讨论】:

    • 当我添加 de 引用以及登录名和密码时,出现该错误:There was an error downloading 'http://grillassessmentservice.cloudapp.net/GrillMenuService.svc /$metadata'. The request failed with HTTP status 404: Not Found. Metadata contains a reference that cannot be resolved: 'http://grillassessmentservice.cloudapp.net/GrillMenuService.svc'. The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic'.
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2011-02-10
    • 2018-08-01
    相关资源
    最近更新 更多