2014-01-08 2 views
1

타사 웹 서비스에 액세스하기위한 몇 가지 작은 C# 프로그램을 만들고 있습니다. 이 다른 서비스가 있지만, 구조가 매우 유사하다 - 특히 'QueryOrganisationalCentreIn'동일하게 명명 된 끝점을 사용하는 다중 서비스

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:tns="http://sap.com/xi/A1S/Global" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ...> 
... 
    <wsdl:binding name="binding_SOAP12" type="tns:QueryOrganisationalCentreIn"> 
    ... 
    </wsdl:binding> 
    <wsdl:service name="service"> 
    <wsdl:port name="binding_SOAP12" binding="tns:binding_SOAP12"> 
     <wsoap12:address location="https://my123456.sapbydesign.com/sap/bc/srt/scs/sap/queryorganisationalcentrein?sap-vhost=my123456.sapbydesign.com"/> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

으로의 서비스 'QueryCustomerIn'

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:tns="http://sap.com/xi/A1S/Global" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" ...> 
... 
    <wsdl:binding name="binding_SOAP12" type="tns:QueryCustomerIn"> 
    ... 
    </wsdl:binding> 
    <wsdl:service name="service"> 
    <wsdl:port name="binding_SOAP12" binding="tns:binding_SOAP12"> 
     <wsoap12:address location="https://my123456.sapbydesign.com/sap/bc/srt/scs/sap/querycustomerin1?sap-vhost=my123456.sapbydesign.com"/> 
    </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

WSDL에 대한 바인딩

WSDL에 대한 명명 규칙에 두 서비스 모두 끝점을 "binding_SOAP12"로 지정하지만 각 서비스는 다른 위치를 가리 킵니다.

나는 "서비스 참조 추가"와 비주얼 스튜디오 2010에서 클라이언트를 만들 때, 나는 서비스를 다음과 같은 방법으로 액세스 할 수 있습니다

QueryOrganisationalCentreInClient client = new QueryOrganisationalCentreInClient("binding_SOAP12"); 

을하지만 두 번째 서비스, 두 번째의 유사한 요청을 추가 할 때 서비스

QueryCustomerInClient client = new QueryCustomerInClient("binding_SOAP12"); 

는 System.InvalidOperationException (엔드 포인트를 찾을 수 없습니다 또는 endpointcontract이 유효하지 않습니다)와 함께 실패합니다.

나는 몇 가지 테스트를 다음과 같은 발견 : 정상적으로 나는 새로운 프로젝트를 생성하면 두 번째 서비스는
  • 를 추가하기 전에 같은 작품 (... 조직)

    • 첫 번째 클라이언트를 두 번째 서비스 (Customer ...)를 추가하면됩니다 (다른 서비스가없는 경우).
    • 고객 ... 서비스의 (제공된) WSDL 파일을 편집하고 엔드 포인트의 이름을 다른 이름으로 변경하면 첫 번째 서비스 (조직 ...)와 함께 프로젝트에서도 작동합니다.

    VisualStudio 2010에서는 동일한 프로젝트의 다른 서비스 계약에서 똑같은 이름의 끝점을 처리 할 수없는 것처럼 보입니다. 그러나 엔드 포인트의 이름 지정을 지시 할 위치에 있지 않기 때문에 :이 문제점에도 불구하고 프로젝트에서 두 서비스를 모두 어떻게 사용할 수 있습니까? 사전에

    감사합니다,

  • +0

    전문가가 아니지만 클라이언트에서 직접 전체 바인딩을 호출하는 대신 작업 이름이나 작업을 기반으로 웹 서비스를 호출하려면 몇 가지 구성이 있어야합니다. – kingAm

    답변

    1

    코드에 2 가지 다른 문제가있을 수 있습니다.

    .config을 표시 할 수 있습니까?

    경우에 따라 1 binding name과 2 endpoint addresses이 같고 contract 인 경우가 있습니다. 하나는 1.1 비누 용이고 다른 하나는 1.2 용 비누. 그들 중 하나를 시도하고 삭제해야합니다.

    다른 시나리오에서는 1 개의 바인딩 이름과 2 개의 끝점을 가질 수 있지만 계약 클래스가 다른 인 경우에만 작동합니다.

    +0

    app.config를 한 번 보면 충분했을 것입니다. 이미 동일한 이름 (내 경우 binding_SOAP121)이있는 경우 마법사가 자동으로 끝점의 이름을 바꿉니다. VS가 그들이 속한 다른 서비스 네임 스페이스로 2 개의 끝점을 구별 할 수 있다고 생각했습니다. – Aaginor

    1


    프랭크 마법사는 코드 및 구성을 생성하는 방법입니다. (작동하지 않기 때문에) 마음에 들지 않으면 프로젝트의 app.config으로 가서 한 바인딩 정의의 이름을 직접 손으로 바꿉니다.

    +0

    마법사가 이름을 변경 했으므로 두 번째 서비스가 작동하지 않습니다. 나를 올바른 방향으로 밀어 주셔서 감사합니다! – Aaginor

    관련 문제