c# - Acess WebService - XML

时间:2016-07-03 11:38:02

标签: c# xml web-services

我正在使用c#,而且我是新手。 我有一个网络服务的网址: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();
        }

    }

但我无法访问网络服务。有人可以解释一下它是如何工作的吗? 我试图通过添加引用访问,给我登录和密码错误。在那个阶段: enter image description here 谢谢&#39; S。

1 个答案:

答案 0 :(得分:0)

它不是标准的Web服务,它是可以通过OData提供程序访问的feed(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);
            }
        }
    }
}