2009-09-24 2 views
0

.NET에서 간단한 웹 서비스를 만들려고하는데 해당 지식이 제한되어 있습니다.C# .NET의 웹 서비스 및 객체 직렬화 - 기본 질문

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 

namespace WebService1 
{ 
    /// <summary> 
    /// Summary description for Service1 
    /// </summary> 
    /// 
    class Login 
    { 
     public string User; 
     public string Password; 
     public string Database; 
    } 

    public class Item 
    { 
     public string Name; 
     public float Price; 
     public float Quanity; 
    } 

    public class WebOrder 
    { 
     public int Number; 
     public int ClientID; 
     public Item[] Items; 
    } 

    public class ExternalAPIItem 
    { 
     public string APIItemName; 
     public float APIItemPrice; 
     public float APIItemQuanity; 
    } 

    public class ExternalAPIOrder 
    { 
     public int APIOrderNumber; 
     public int APIOrderClientID; 
     public ExternalAPIItem[] APIOrderItems; 
    } 

    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService] 
    public class Service1 : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string MakeOrder(WebOrder Order) 
     { 
      Login DBLogin; 
      ExternalAPIOrder APIOrder; 
      DBLogin = new Login(); 
      DBLogin.User = "SomeUser"; 
      DBLogin.Password = "SomePassword"; 
      DBLogin.Database = "SomeDatabase"; 

      //try to log via external API 

      //ExternalAPI.LogIn(DBLogin) <- is this possible to log call to this method? 

      APIOrder = new ExternalAPIOrder(); 

      //how to deserialize Order object to APIOrder object which is instance of different class? 

      //ExternalAPI.MakeOrder(APIOrder) <- is this possible to log call to this method? 

      return "Order complete"; 
     } 
    } 
} 

이 웹 서비스의 목적은 인터넷에서 몇 가지 명령을 받고 서버에서 외부 API를 통해 순서를 실현하는 것입니다 : 여기

이 웹 서비스의 코드입니다. 그것은이

일부 웹 사이트 (들)처럼 보인다 -> WebService1을 -> ExternalAPI -> 내가 몇 가지 질문이 데이터베이스

을 Underying : 첫째로 나는로드됩니다 일부 구성 데이터를 보관할 필요가

  1. 을 웹 서비스 인스턴스의 시작 부분. 내 첫 번째 아이디어는 XML 파일에 유지하고 해당 파일을 Login 개체로 deserialize했다. 그러나이 Web.config 파일은 이미 서비스에 번들로 제공됩니다. 그런 것들을 지키는 것이 좋은 곳입니까? 그렇게한다면 (a) 그 파일에 내 데이터를 저장하는 방법 (b) 파일에서 저장된 데이터를 Login 개체로 검색하는 방법을 보여줄 수 있습니다.
  2. 필자는 직렬화에 대한 기사를 거의 읽지 않았으며 일부 기본 객체를 XML로 직렬화하는 방법을 알고 있습니다. 그러나 한 개체에서 다른 개체로 데이터를 전송하려면 어떻게해야합니까? 위의 예에서 데이터를 Order에서 APIOrder으로 전송해야한다는 것을 알았습니다. 필드 값을 하나씩 할당 할 수 있다는 것을 알고 있지만 더 좋은 방법이 있습니까? 또한 각 Order 객체는 하나 이상의 Item 객체를 가질 수 있으며이 객체는 APIOrder 객체의 적절한 객체로 직렬화 해제되어야합니다. 아마도 나는 (1) Order을 XML로 직렬화하고, (2) XML을 변환하고, (3) XML을 APIOrder으로 역 직렬화해야한다. 누군가이 작업을 실현하는 코드를 보여줄 수 있습니까?
  3. 실행 된 메소드 이름을 문자열로 변환 할 수있는 방식으로 특정 메소드의 실행을 일부 파일에 로그인 할 수 있습니까? 예 : ExternalAPILogIn 메서드입니다. ExternalAPI 클래스 (메서드 매개 변수 사용)에서 메서드를 매개 변수로 취할 수있는 메서드를 만들고 먼저 메서드 이름을 string으로 변환 한 다음 해당 메서드를 실행할 수 있습니까?

이것이 의미가 있는지는 모르지만 나는 ExternalAPI 클래스가 정의 된 어셈블리를 사용해야합니다. 따라서 실제 웹 서비스에서는 ExternalAPIItemExternalAPIOrder이 정의되지 않습니다. 어셈블리 네임 스페이스에 이미 정의되어 있습니다. 두 번째 질문에 대답하기 위해 시간

+4

2009 년 ASP.NET 웹 서비스를 사용하지 마십시오. WCF를 사용하십시오. –

+0

나는 마크와 동의한다. WCF는 이전의 MS 테크놀로지 - 오브 - 위크 (week-of-the-week) 노력과는 달리, 장수 할 것입니다. 일이 잘못 될 때 잘 포장되고, 완전하며, 우수한 * 진단 메시지. 우리는 최근에 HTTP.SYS의 MaxEndPoints 제한을 초과했으며, 우리가 얻은 예외는 레지스트리 키로 직접 조정할 것을 지적했습니다. 나가서 WCF를해라! – PaulMcG

+0

Thansk 얘들 아. 그리고 저는 방금 며칠을 배웠습니다 (ASP.NET). 그러나 다른 질문은 아직 없습니다. – Wodzu

답변

2

에 대한

덕분에, 나는 XML에 주문을 변환하는에 XSLT를 실행하고, 역 직렬화하는 공상을 받고 피할 것이다. 단순하게 유지하십시오. Order 매개 변수를 받아들이고 공용 속성을 복사하는 APIOrder에 생성자가 있어야합니다. LineItem (또는 무엇이든) 자식 객체를 APILineItem 생성자에 위임합니다. 읽기 쉽고, 유지 보수가 쉽고, 디버그하기 쉽고, 테스트하기 쉽습니다. APIOrder를 Order에 연결하는 것을 피하려면이 작업을 수행하는 변환기 클래스를 작성하십시오.