Share via


웹 서비스 끝점이 WSDL 파일을 따르도록 설정한 후의 코드 변경

업데이트: 2007년 11월

구현된 웹 서비스 끝점이 WSDL(웹 서비스 기술 언어) 파일을 따르도록 설정하면 끝점과 연결된 다음 코드 파일이 변경될 수 있습니다.

  • 웹 서비스 클래스를 구현하는 파일

    이 클래스에는 작업 시그니처와 모든 메서드 본문 코드가 들어 있습니다. 작업은 WebMethod 특성 및 기타 관련 특성이 있는 클래스 메서드입니다.

    참고:

    구현된 끝점이 WSDL을 따르도록 설정해도 메서드 본문 코드는 변경되지 않습니다. 그러나 이 항목에 설명된 변경 사항으로 인해 메서드 본문 코드에서 더 이상 컴파일을 수행하지 못하게 될 수도 있습니다. 따라서 코드를 검토하여 컴파일러 오류를 수정해야 할 수 있는 변경 사항을 식별해야 합니다.

  • 사용자 지정 형식 정의가 포함된 하나 이상의 클래스 파일

변경되는 사항은 다음과 같습니다.

  • 새 작업 시그니처 추가

  • 작업 시그니처 업데이트

  • 작업 시그니처에서 WebMethod 특성 제거

  • 작업 특성 업데이트

  • 사용자 지정 형식 정의 추가 또는 이름 바꾸기

  • 처음 일치하는 작업만 따르도록 설정

  • 코드 파일의 변경 사항에 대한 주석 추가

웹 서비스 정보 창에도 해당 변경 사항이 반영됩니다. 다음 단원에서는 이러한 변경 사항에 대해 자세히 설명합니다.

새 작업 시그니처 추가

WSDL 파일에 새 작업이 지정되어 있는 경우 Visual Studio에서는 웹 서비스 클래스에 해당 작업의 시그니처와 특성을 추가합니다. 이러한 새 작업 시그니처는 WebMethod 특성을 통해 확인할 수 있습니다. 

참고:

WebMethod 특성이 없는 클래스 메서드는 작업이 아니라 웹 메서드가 아닌 메서드입니다. 이러한 메서드는 작업을 비교할 때 포함되지 않습니다. 자세한 내용은 작업 시그니처 업데이트를 참조하십시오.

새 작업의 MessageName 매개 변수는 WSDL 파일에 있는 작업 이름과 일치합니다. MessageName 매개 변수는 작업 시그니처의 WebMethod 특성에서 확인할 수 있습니다.

참고:

새 작업의 이름이 기존 클래스 멤버(웹 메서드가 아닌 메서드 제외)의 이름과 같을 수 있습니다. 이 경우 Visual Studio에서는 새 작업의 메서드 이름에 서수를 추가하여 해당 메서드를 고유하게 식별할 수 있게 해 줍니다.

예를 들어 웹 서비스 클래스에 "newCatalog"라는 멤버가 들어 있는 경우 WSDL 파일에 "newCatalog"라는 작업이 지정되어 있으면 작업의 메서드 이름은 해당 클래스에서 "newCatalog2"로 표시됩니다. 다음 코드 줄에서는 이 WSDL 파일을 따르도록 설정한 후의 결과를 보여 줍니다.

[Visual Basic]
Public newCatalog As String

'''<remarks> [UserName::Date] This Web method was added after conforming this service to the WSDL file. </remarks>
<System.Web.Services.WebMethod(MessageName="newCatalog")> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="MyWebService")> _
Public Sub getCatalog2()
...
End Sub

[Visual C#]
public string newCatalog;

/// <remarks> [UserName::Date] This Web method was added after conforming this service to the WSDL file. </remarks>
[System.Web.Services.WebMethod(MessageName="newCatalog"), System.Web.Services.Protocols.SoapDocumentMethod(Binding = "MyWebService")]
public string newCatalog2()
{...}

작업 시그니처 업데이트

WSDL 파일에 웹 서비스 클래스의 작업과 일치하는 작업이 지정되어 있는 경우 Visual Studio에서는 클래스의 작업 시그니처와 특성을 업데이트합니다. 다음 목록에서는 웹 서비스 클래스와 WSDL 파일 간에 작업을 일치시키는 데 사용되는 조건에 대해 설명합니다. 이 조건이 소개된 예제에서는 클래스 코드와 "getCatalog"라는 WSDL 작업(메시지 이름이 같음)을 비교합니다. 

  • 클래스 작업에 WSDL 작업과 동일한 메서드 이름은 없지만 메시지 이름이 같은 경우 두 작업은 "일치"하는 것으로 간주됩니다.

    참고:

    MessageName 특성은 작업의 메시지 이름을 식별합니다.

    예를 들어 다음 클래스 작업은 "getCatalog" WSDL 작업과 일치합니다.

    [System.Web.Services.WebMethod(MessageName = "getCatalog")]
    public void getNewCatalog()
    
  • 클래스 작업에 메시지 이름은 없지만 WSDL 작업과 메서드 이름이 같은 경우 두 작업은 "일치"하는 것으로 간주됩니다.

    예를 들어 다음 클래스 작업은 "getCatalog" WSDL 작업과 일치합니다.

    [System.Web.Services.WebMethod()]
    public void getCatalog()
    
  • 클래스 작업에 WSDL 작업과 동일한 메서드 이름이 있지만 메시지 이름이 다른 경우 두 작업은 "일치하지 않는" 것으로 간주됩니다.

    예를 들어 다음 클래스 작업은 "getCatalog" WSDL 작업과 일치하지 않습니다.

    [System.Web.Services.WebMethod(MessageName = "getGolfCatalog")]
    public void getCatalog()
    
  • 클래스 메서드에 동일한 메서드 이름이 들어 있지만 WebMethod 특성이 없는 경우 해당 메서드는 작업으로 간주되지 않습니다. 이 메서드는 변경되지 않은 상태로 유지됩니다. 대신 클래스에 새 작업 시그니처와 해당 특성이 추가됩니다.

    예를 들어 다음 클래스 메서드는 WebMethod 특성이 없기 때문에 "getCatalog" WSDL 작업과 일치하지 않는 것으로 간주되어 변경되지 않습니다.

    public void getCatalog()
    

작업 시그니처에서 WebMethod 특성 제거

웹 서비스 클래스에서 WSDL 파일에 지정되어 있지 않은 작업을 구현하는 경우 Visual Studio에서는 클래스의 해당 작업에서 WebMethod 특성 및 해당되는 다른 특성을 제거합니다. 작업은 웹 메서드가 아닌 메서드로 변경됩니다.

예를 들어 다음 코드 줄에서는 WSDL 파일을 따르도록 설정하기 전에 WebMethod 특성 및 해당되는 다른 특성이 있는 작업을 보여 줍니다.

[Visual Basic]
<System.Web.Services.WebMethod()> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="myWebService")> _
Public Sub getCatalog()
...
End Sub

[Visual C#]
[System.Web.Services.WebMethod(), System.Web.Services.Protocols.SoapDocumentMethod(Binding = "myWebService")]
public void getCatalog()
{...}

다음 코드 줄에서는 더 이상 이 작업을 지정하지 않는 WSDL 파일을 따르도록 설정한 후 해당 작업에서 WebMethod 특성 및 기타 특성이 어떻게 제거되는지를 보여 줍니다. 작업은 웹 메서드가 아닌 메서드가 됩니다.

[Visual Basic]
''' <remarks>[UserName::Date] The WebMethod attribute was removed after conforming this service to the WSDL file. This operation does not exist under the corresponding port type in the WSDL file. </remarks>
Public Sub getCatalog()
...
End Sub

[Visual C#]
/// <remarks>[UserName::Date] The WebMethod attribute was removed after conforming this service to the WSDL file. This operation does not exist under the corresponding port type in the WSDL file. </remarks>
public void getCatalog() 
{...}

웹 서비스 및 작업 특성 업데이트

웹 서비스 클래스 또는 작업의 특성이 WSDL 파일과 일치하지 않으면 Visual Studio에서는 클래스에서 해당 항목을 업데이트합니다. 예를 들면 다음과 같습니다.

  • 웹 서비스 이름과 네임스페이스가 업데이트될 수 있습니다.

    클래스의 서비스 이름과 네임스페이스가 WSDL 파일과 일치하지 않으면 Visual Studio에서는 이들 항목을 업데이트합니다. 또한 Visual Studio에서는 클래스에 있는 이러한 값을 WebServiceBinding 특성의 일부로 업데이트합니다.

  • 각 작업의 바인딩 이름이 업데이트됩니다.

    클래스에 있는 각 작업의 바인딩 이름이 WSDL 파일과 일치하지 않으면 Visual Studio에서는 해당 바인딩 이름을 업데이트합니다. 업데이트할 때는 클래스의 이 값을 각 작업에 지정된 SoapDocumentMethod 특성의 일부로 인식하여 수행합니다.

다음 목록에서는 업데이트될 수 있는 다른 특성에 대해 설명합니다.

  • WebMethod

  • WebService

  • SoapDocumentService

  • SoapRpcMethod

  • SoapRpcService

사용자가 추가한 특성은 변경되지 않습니다.

사용자 지정 형식 정의 추가 또는 이름 바꾸기

WSDL 파일에서 추가된 작업 시그니처는 사용자 지정 형식을 참조할 수 있습니다. 관련 응용 프로그램이 구현되면 솔루션에 클래스 파일이 하나 이상 표시될 수 있으며 이러한 파일에는 해당되는 형식 정의가 있습니다. 이러한 파일 이름의 형식은 다음과 같습니다.

"<ServiceName><CustomTypeName>.<FileExtension>"

참고:

파일 확장명은 구현 언어에 따라 달라집니다.

이들 파일에서 이러한 형식 정의가 포함된 네임스페이스의 형식은 다음과 같습니다.

Namespace <DefaultNamespace>.<ServiceName>CustomTypes 

예를 들어 WSDL 파일에 "MyService"라는 서비스가 지정되어 있고 이 서비스에서 "MyCustomType"이라는 사용자 지정 형식을 참조하는 작업을 제공한다고 가정합니다.

웹 서비스 끝점이 이 WSDL 파일을 따르도록 설정하면 새로 추가된 작업 시그니처도 이 사용자 지정 형식을 참조합니다. 형식 파일의 이름은 관련 응용 프로그램을 구현할 때 Visual Basic을 사용했는지 Visual C#을 사용했는지에 따라 "MyServiceMyCustomType.vb"이거나 "MyServiceMyCustomType.cs"입니다. 이 형식 파일에서 네임스페이스와 형식 정의는 다음과 같이 표시됩니다.

[Visual Basic]
Namespace ApplicationName.MyServiceCustomTypes
   Public Class MyCustomType
   ...
   End Class
End Namespace

[Visual C#]
namespace ApplicationName.MyServiceCustomTypes 
{
   public class MyCustomType
   {...}
}

웹 서비스 끝점이 WSDL 파일을 따르도록 설정하면 다음 조건에 따라 해당 파일이 다양하게 변경될 수 있습니다.

  • 서비스 이름은 같지만 기존 형식 정의 이름이 WSDL 파일에 지정된 형식 이름과 동일하지 않습니다.

    이 시나리오에서는 솔루션에 새 형식 파일이 추가됩니다. 이러한 파일에는 WSDL 파일에 지정된 새로운 형식 정의가 포함되어 있습니다. 이들 정의는 해당 서비스 이름을 사용하는 네임스페이스에 표시됩니다.

  • 서비스 이름은 같지만 하나 이상의 기존 형식 정의 이름이 WSDL 파일에 지정된 형식 이름과 동일합니다.

    이 시나리오의 경우 Visual Studio에서는 해당 형식 이름 뒤에 "_Obsolete"라는 텍스트를 추가하여 기존 형식 정의의 이름을 바꿉니다. 그런 다음 Visual Studio에서는 충돌이 발생한 형식과 동일한 형식 파일 및 네임스페이스에 새 형식 정의를 추가합니다. 그러면 이 웹 서비스의 작업이 충돌이 발생한 형식이 아닌 새 형식을 참조하게 됩니다.

    참고:

    네임스페이스에는 이미 "_Obsolete" 문자열을 사용하여 이름이 바뀐 형식이 들어 있으므로 Visual Studio에서는 이 문자열 뒤에 서수를 추가하여 고유한 이름을 생성합니다.

    예를 들어 형식 파일에 "myCustomType"이라는 형식이 포함되어 있는 경우 WSDL 파일에도 동일한 이름의 형식이 지정되어 있으면 Visual Studio에서는 해당 형식의 이름을 "myCustomType_Obsolete"로 바꿉니다. 그런 다음 Visual Studio에서는 형식 파일에 해당 형식 정의를 추가합니다.

    형식 파일에 "myCustomType_Obsolete" 및 "myCustomType"이라는 형식이 있는 경우 Visual Studio에서는 "myCustomType"의 이름을 "myCustomType_Obsolete2"로 바꿉니다. 그런 다음 Visual Studio에서는 형식 파일에 해당 형식 정의를 추가합니다.

  • 서비스 이름이 다릅니다.

    이 시나리오의 경우 Visual Studio에서는 기존 형식 파일을 수정하지 않습니다. 대신 Visual Studio에서는 서비스 이름이 새로 지정된 새 형식 파일을 솔루션에 추가합니다. 이러한 파일에는 WSDL 파일에 지정된 형식 정의가 포함되어 있습니다. 이들 정의는 해당 서비스 이름을 사용하는 네임스페이스에 표시됩니다.

    참고:

    웹 서비스 클래스도 새로운 서비스 이름으로 업데이트됩니다.

사용자 지정 형식에 대한 자세한 내용은 WSDL 파일 기반의 웹 서비스 끝점을 참조하십시오.

처음 일치하는 작업만 따르도록 설정

웹 서비스 클래스는 WSDL 파일에 지정된 작업과 일치하는 작업을 여러 개 구현할 수 있습니다. 이러한 시나리오에서는 처음 일치하는 작업 시그니처만 WSDL 파일을 따르도록 설정됩니다. 일치하는 나머지 작업 시그니처는 변경되지 않습니다.

이 조건을 수정하려면 올바른 작업 시그니처가 WSDL을 따르도록 설정되었는지 확인해야 합니다. 필요한 경우 나중에 중복되지 않도록 일치하는 다른 작업도 수정합니다.

코드 파일의 변경 사항에 대한 주석 추가

Visual Studio에서는 이러한 코드 파일의 변경 사항을 설명하는 일반적인 주석을 추가합니다. 이러한 주석에는 해당 변경 작업을 수행한 날짜와 사용자의 이름이 포함됩니다.

참고 항목

작업

방법: 웹 서비스 끝점이 WSDL 파일을 따르도록 설정